From 8e3ce87077f8f5a6edc75733ab552780a702fc1d Mon Sep 17 00:00:00 2001 From: Adam Israel Date: Mon, 8 Jan 2018 18:43:40 +0000 Subject: [PATCH] More Py3 conversion work --- Makefile | 10 +- openmanod | 2 +- osm_ro/db_base.py | 30 +-- osm_ro/httpserver.py | 20 +- osm_ro/nfvo.py | 108 ++++---- osm_ro/nfvo_db.py | 18 +- osm_ro/openmanoclient.py | 2 +- osm_ro/utils.py | 14 +- osm_ro/vim_thread.py | 16 +- osm_ro/vimconn.py | 59 +++-- osm_ro/vimconn_aws.py | 6 +- osm_ro/vimconn_openstack.py | 86 ++++--- osm_ro/vimconn_openvim.py | 239 +++++++++--------- osm_ro/vimconn_vmware.py | 61 +++-- .../format_converter/command_progress.py | 2 +- .../format_converter/converter.py | 10 +- .../format_converter/ovf_converter_cli.py | 2 +- osm_ro/vmwarecli.py | 88 +++---- osm_ro/vmwarerecli.py | 70 ++--- requirements.txt | 21 +- setup.py | 14 +- tox.ini | 8 +- 22 files changed, 448 insertions(+), 438 deletions(-) diff --git a/Makefile b/Makefile index d3128451..55864f25 100644 --- a/Makefile +++ b/Makefile @@ -43,11 +43,11 @@ connectors: prepare # python-novaclient is required for that rm -f build/osm_ro/openmanolinkervimconn.py cd build/osm_ro; for i in `ls vimconn_*.py |sed "s/\.py//"` ; do echo "import $$i" >> openmanolinkervimconn.py; done - python build/osm_ro/openmanolinkervimconn.py + python3 build/osm_ro/openmanolinkervimconn.py 2>&1 rm -f build/osm_ro/openmanolinkervimconn.py build: connectors prepare - python -m py_compile build/osm_ro/*.py + python3 -m py_compile build/osm_ro/*.py # cd build && tox -e flake8 lib-openvim: @@ -65,11 +65,11 @@ osm-im: package: prepare # apt-get install -y python-stdeb - cd build && python setup.py --command-packages=stdeb.command sdist_dsc --with-python2=True + cd build && python3 setup.py --command-packages=stdeb.command sdist_dsc --with-python2=True cd build && cp osm_ro/scripts/python-osm-ro.postinst deb_dist/osm-ro*/debian/ cd build/deb_dist/osm-ro* && dpkg-buildpackage -rfakeroot -uc -us mkdir -p .build - cp build/deb_dist/python-*.deb .build/ + cp build/deb_dist/python3-*.deb .build/ snap: echo "Nothing to be done yet" @@ -103,5 +103,3 @@ run-docker: stop-docker: docker-compose -f docker/openmano-compose.yml down - - diff --git a/openmanod b/openmanod index 145fd24d..149e9245 100755 --- a/openmanod +++ b/openmanod @@ -48,7 +48,7 @@ import osm_ro __author__ = "Alfonso Tierno, Gerardo Garcia, Pablo Montes" __date__ = "$26-aug-2014 11:09:29$" -__version__ = "0.5.36-r546" +__version__ = "0.5.37-r547" version_date = "Oct 2017" database_version = 27 # expected database schema version diff --git a/osm_ro/db_base.py b/osm_ro/db_base.py index 42e072b2..c8e5eb16 100644 --- a/osm_ro/db_base.py +++ b/osm_ro/db_base.py @@ -29,7 +29,7 @@ __date__ ="$4-Apr-2016 10:05:01$" import MySQLdb as mdb import uuid as myUuid -from . import utils as af +import utils as af import json #import yaml import time @@ -65,7 +65,7 @@ def _convert_datetime2str(var): It enters recursively in the dict var finding this kind of variables ''' if type(var) is dict: - for k,v in list(var.items()): + for k,v in var.items(): if type(v) is datetime.datetime: var[k]= v.strftime('%Y-%m-%dT%H:%M:%S') elif type(v) is dict or type(v) is list or type(v) is tuple: @@ -85,7 +85,7 @@ def _convert_bandwidth(data, reverse=False, logger=None): None ''' if type(data) is dict: - for k in list(data.keys()): + for k in data.keys(): if type(data[k]) is dict or type(data[k]) is tuple or type(data[k]) is list: _convert_bandwidth(data[k], reverse, logger) if "bandwidth" in data: @@ -120,7 +120,7 @@ def _convert_str2boolean(data, items): None ''' if type(data) is dict: - for k in list(data.keys()): + for k in data.keys(): if type(data[k]) is dict or type(data[k]) is tuple or type(data[k]) is list: _convert_str2boolean(data[k], items) if k in items: @@ -320,7 +320,7 @@ class db_base(): def __remove_quotes(self, data): '''remove single quotes ' of any string content of data dictionary''' - for k,v in list(data.items()): + for k,v in data.items(): if type(v) == str: if "'" in v: data[k] = data[k].replace("'","_") @@ -334,11 +334,11 @@ class db_base(): Return: the number of updated rows, exception if error ''' #gettting uuid - values = ",".join(map(self.__tuple2db_format_set, iter(UPDATE.items()) )) + values = ",".join(map(self.__tuple2db_format_set, UPDATE.iteritems() )) if modified_time: values += ",modified_at={:f}".format(modified_time) cmd= "UPDATE " + table +" SET " + values +\ - " WHERE " + " and ".join(map(self.__tuple2db_format_where, iter(WHERE.items()) )) + " WHERE " + " and ".join(map(self.__tuple2db_format_where, WHERE.iteritems() )) self.logger.debug(cmd) self.cur.execute(cmd) return self.cur.rowcount @@ -400,7 +400,7 @@ class db_base(): self.cur.execute(cmd) #insertion cmd= "INSERT INTO " + table +" SET " + \ - ",".join(map(self.__tuple2db_format_set, iter(INSERT.items()) )) + ",".join(map(self.__tuple2db_format_set, INSERT.iteritems() )) if created_time: cmd += ",created_at=%f" % created_time if confidential_data: @@ -501,11 +501,11 @@ class db_base(): #print 'from_', from_ if 'WHERE' in sql_dict and len(sql_dict['WHERE']) > 0: w=sql_dict['WHERE'] - where_ = "WHERE " + " AND ".join(map(self.__tuple2db_format_where, iter(w.items()))) + where_ = "WHERE " + " AND ".join(map(self.__tuple2db_format_where, w.iteritems())) else: where_ = "" if 'WHERE_NOT' in sql_dict and len(sql_dict['WHERE_NOT']) > 0: w=sql_dict['WHERE_NOT'] - where_2 = " AND ".join(map(self.__tuple2db_format_where_not, iter(w.items()))) + where_2 = " AND ".join(map(self.__tuple2db_format_where_not, w.iteritems())) if len(where_)==0: where_ = "WHERE " + where_2 else: where_ = where_ + " AND " + where_2 #print 'where_', where_ @@ -563,14 +563,14 @@ class db_base(): where_or = "" w=sql_dict.get('WHERE') if w: - where_and = " AND ".join(map(self.__tuple2db_format_where, iter(w.items()) )) + where_and = " AND ".join(map(self.__tuple2db_format_where, w.iteritems() )) w=sql_dict.get('WHERE_NOT') if w: if where_and: where_and += " AND " - where_and += " AND ".join(map(self.__tuple2db_format_where_not, iter(w.items()) ) ) + where_and += " AND ".join(map(self.__tuple2db_format_where_not, w.iteritems() ) ) w=sql_dict.get('WHERE_OR') if w: - where_or = " OR ".join(map(self.__tuple2db_format_where, iter(w.items()) )) + where_or = " OR ".join(map(self.__tuple2db_format_where, w.iteritems() )) if where_and and where_or: if sql_dict.get("WHERE_AND_OR") == "AND": where_ = "WHERE " + where_and + " AND (" + where_or + ")" @@ -619,7 +619,7 @@ class db_base(): what = 'uuid' if af.check_valid_uuid(uuid_name) else 'name' cmd = " SELECT * FROM {} WHERE {}='{}'".format(table, what, uuid_name) if WHERE_OR: - where_or = " OR ".join(map(self.__tuple2db_format_where, iter(WHERE_OR.items()) )) + where_or = " OR ".join(map(self.__tuple2db_format_where, WHERE_OR.iteritems() )) if WHERE_AND_OR == "AND": cmd += " AND (" + where_or + ")" else: @@ -657,7 +657,7 @@ class db_base(): rows = self.cur.fetchall() return self.cur.rowcount, rows except (mdb.Error, AttributeError) as e: - print("nfvo_db.get_uuid DB Exception %d: %s" % (e.args[0], e.args[1])) + print "nfvo_db.get_uuid DB Exception %d: %s" % (e.args[0], e.args[1]) r,c = self._format_error(e) if r!=-HTTP_Request_Timeout or retry_==1: return r,c diff --git a/osm_ro/httpserver.py b/osm_ro/httpserver.py index 1f08c468..b0432678 100644 --- a/osm_ro/httpserver.py +++ b/osm_ro/httpserver.py @@ -37,7 +37,7 @@ import time import logging from jsonschema import validate as js_v, exceptions as js_e -from .openmano_schemas import vnfd_schema_v01, vnfd_schema_v02, \ +from openmano_schemas import vnfd_schema_v01, vnfd_schema_v02, \ nsd_schema_v01, nsd_schema_v02, nsd_schema_v03, scenario_edit_schema, \ scenario_action_schema, instance_scenario_action_schema, instance_scenario_create_schema_v01, \ tenant_schema, tenant_edit_schema,\ @@ -45,9 +45,9 @@ from .openmano_schemas import vnfd_schema_v01, vnfd_schema_v02, \ object_schema, netmap_new_schema, netmap_edit_schema, sdn_controller_schema, sdn_controller_edit_schema, \ sdn_port_mapping_schema, sdn_external_port_schema -from . import nfvo -from . import utils -from .db_base import db_base_Exception +import nfvo +import utils +from db_base import db_base_Exception from functools import wraps global mydb @@ -67,7 +67,7 @@ HTTP_Internal_Server_Error= 500 def delete_nulls(var): if type(var) is dict: - for k in list(var.keys()): + for k in var.keys(): if var[k] is None: del var[k] elif type(var[k]) is dict or type(var[k]) is list or type(var[k]) is tuple: if delete_nulls(var[k]): del var[k] @@ -83,7 +83,7 @@ def convert_datetime2str(var): It enters recursively in the dict var finding this kind of variables ''' if type(var) is dict: - for k,v in list(var.items()): + for k,v in var.items(): if type(v) is float and k in ("created_at", "modified_at"): var[k] = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime(v) ) elif type(v) is dict or type(v) is list or type(v) is tuple: @@ -166,10 +166,10 @@ def change_keys_http2db(data, http_db, reverse=False): change_keys_http2db(d, http_db, reverse) elif type(data) is dict or type(data) is bottle.FormsDict: if reverse: - for k,v in list(http_db.items()): + for k,v in http_db.items(): if v in data: data[k]=data.pop(v) else: - for k,v in list(http_db.items()): + for k,v in http_db.items(): if k in data: data[v]=data.pop(k) def format_out(data): @@ -767,7 +767,7 @@ def http_getnetmap_datacenter_id(tenant_id, datacenter_id, netmap_id=None): if netmap_id and len(netmaps)==1: data={'netmap' : netmaps[0]} elif netmap_id and len(netmaps)==0: - bottle.abort(HTTP_Not_Found, "No netmap found with " + " and ".join([str(x[0])+": "+str(x[1]) for x in iter(where_.items())]) ) + bottle.abort(HTTP_Not_Found, "No netmap found with " + " and ".join(map(lambda x: str(x[0])+": "+str(x[1]), where_.iteritems())) ) return else: data={'netmaps' : netmaps} @@ -799,7 +799,7 @@ def http_delnetmap_datacenter_id(tenant_id, datacenter_id, netmap_id=None): #change_keys_http2db(content, http2db_tenant, reverse=True) deleted = mydb.delete_row(FROM='datacenter_nets', WHERE= where_) if deleted == 0 and netmap_id: - bottle.abort(HTTP_Not_Found, "No netmap found with " + " and ".join([str(x[0])+": "+str(x[1]) for x in iter(where_.items())]) ) + bottle.abort(HTTP_Not_Found, "No netmap found with " + " and ".join(map(lambda x: str(x[0])+": "+str(x[1]), where_.iteritems())) ) if netmap_id: return format_out({"result": "netmap %s deleted" % netmap_id}) else: diff --git a/osm_ro/nfvo.py b/osm_ro/nfvo.py index 8a1d9490..bd5b5d6d 100644 --- a/osm_ro/nfvo.py +++ b/osm_ro/nfvo.py @@ -30,18 +30,18 @@ __date__ ="$16-sep-2014 22:05:01$" # import imp # import json import yaml -from . import utils -from . import vim_thread -from .db_base import HTTP_Unauthorized, HTTP_Bad_Request, HTTP_Internal_Server_Error, HTTP_Not_Found,\ +import utils +import vim_thread +from db_base import HTTP_Unauthorized, HTTP_Bad_Request, HTTP_Internal_Server_Error, HTTP_Not_Found,\ HTTP_Conflict, HTTP_Method_Not_Allowed -from . import console_proxy_thread as cli -from . import vimconn +import console_proxy_thread as cli +import vimconn import logging import collections from uuid import uuid4 -from .db_base import db_base_Exception +from db_base import db_base_Exception -from . import nfvo_db +import nfvo_db from threading import Lock import time as t from lib_osm_openvim import ovim as ovim_module @@ -212,7 +212,7 @@ def stop_service(): global ovim, global_config if ovim: ovim.stop_service() - for thread_id,thread in list(vim_threads["running"].items()): + for thread_id,thread in vim_threads["running"].items(): thread.insert_task("exit") vim_threads["deleting"][thread_id] = thread vim_threads["running"] = {} @@ -518,7 +518,7 @@ def create_or_use_image(mydb, vims, image_dict, rollback_list, only_create_at_vi image_mano_id = mydb.new_row('images', temp_image_dict, add_uuid=True) rollback_list.append({"where":"mano", "what":"image","uuid":image_mano_id}) #create image at every vim - for vim_id,vim in vims.items(): + for vim_id,vim in vims.iteritems(): datacenter_vim_id = vim["config"]["datacenter_tenant_id"] image_created="false" #look at database @@ -636,7 +636,7 @@ def create_or_use_flavor(mydb, vims, flavor_dict, rollback_list, only_create_at_ if 'uuid' in flavor_dict: del flavor_dict['uuid'] flavor_vim_id=None - for vim_id,vim in list(vims.items()): + for vim_id,vim in vims.items(): datacenter_vim_id = vim["config"]["datacenter_tenant_id"] flavor_created="false" #look at database @@ -809,7 +809,7 @@ def new_vnfd_v3(mydb, tenant_id, vnf_descriptor): vnfd_descriptor_list = vnfd_catalog_descriptor.get("vnfd") if not vnfd_descriptor_list: vnfd_descriptor_list = vnfd_catalog_descriptor.get("vnfd:vnfd") - for vnfd_yang in myvnfd.vnfd_catalog.vnfd.values(): + for vnfd_yang in myvnfd.vnfd_catalog.vnfd.itervalues(): vnfd = vnfd_yang.get() # table vnf @@ -833,7 +833,7 @@ def new_vnfd_v3(mydb, tenant_id, vnf_descriptor): # table nets (internal-vld) net_id2uuid = {} # for mapping interface with network - for vld in vnfd.get("internal-vld").values(): + for vld in vnfd.get("internal-vld").itervalues(): net_uuid = str(uuid4()) uuid_list.append(net_uuid) db_net = { @@ -849,7 +849,7 @@ def new_vnfd_v3(mydb, tenant_id, vnf_descriptor): # table vms (vdus) vdu_id2uuid = {} vdu_id2db_table_index = {} - for vdu in vnfd.get("vdu").values(): + for vdu in vnfd.get("vdu").itervalues(): vm_uuid = str(uuid4()) uuid_list.append(vm_uuid) db_vm = { @@ -928,7 +928,7 @@ def new_vnfd_v3(mydb, tenant_id, vnf_descriptor): epa_vcpu_set = True if len(numa_node["paired-threads"].get("paired-thread-ids")): numa["paired-threads-id"] = [] - for pair in numa_node["paired-threads"]["paired-thread-ids"].values(): + for pair in numa_node["paired-threads"]["paired-thread-ids"].itervalues(): numa["paired-threads-id"].append( (str(pair["thread-a"]), str(pair["thread-b"])) ) @@ -983,7 +983,7 @@ def new_vnfd_v3(mydb, tenant_id, vnf_descriptor): boot_data['boot-data-drive'] = True if vdu["supplemental-boot-data"].get('config-file'): om_cfgfile_list = list() - for custom_config_file in vdu["supplemental-boot-data"]['config-file'].values(): + for custom_config_file in vdu["supplemental-boot-data"]['config-file'].itervalues(): # TODO Where this file content is present??? cfg_source = str(custom_config_file["source"]) om_cfgfile_list.append({"dest": custom_config_file["dest"], @@ -999,7 +999,7 @@ def new_vnfd_v3(mydb, tenant_id, vnf_descriptor): cp_name2iface_uuid = {} cp_name2vm_uuid = {} # for iface in chain(vdu.get("internal-interface").itervalues(), vdu.get("external-interface").itervalues()): - for iface in vdu.get("interface").values(): + for iface in vdu.get("interface").itervalues(): iface_uuid = str(uuid4()) uuid_list.append(iface_uuid) db_interface = { @@ -1051,8 +1051,8 @@ def new_vnfd_v3(mydb, tenant_id, vnf_descriptor): HTTP_Bad_Request) elif iface.get("internal-connection-point-ref"): try: - for vld in vnfd.get("internal-vld").values(): - for cp in vld.get("internal-connection-point").values(): + for vld in vnfd.get("internal-vld").itervalues(): + for cp in vld.get("internal-connection-point").itervalues(): if cp.get("id-ref") == iface.get("internal-connection-point-ref"): db_interface["net_id"] = net_id2uuid[vld.get("id")] for cp_descriptor in vnfd_descriptor["connection-point"]: @@ -1075,9 +1075,9 @@ def new_vnfd_v3(mydb, tenant_id, vnf_descriptor): db_interfaces.append(db_interface) # VNF affinity and antiaffinity - for pg in vnfd.get("placement-groups").values(): + for pg in vnfd.get("placement-groups").itervalues(): pg_name = get_str(pg, "name", 255) - for vdu in pg.get("member-vdus").values(): + for vdu in pg.get("member-vdus").itervalues(): vdu_id = get_str(vdu, "member-vdu-ref", 255) if vdu_id not in vdu_id2db_table_index: raise NfvoException("Error. Invalid VNF descriptor at 'vnfd[{vnf}]':'placement-groups[{pg}]':" @@ -1427,7 +1427,7 @@ def get_vnf_id(mydb, tenant_id, vnf_id): vnf_id = vnf["uuid"] filter_keys = ('uuid', 'name', 'description', 'public', "tenant_id", "osm_id", "created_at") - filtered_content = dict( (k,v) for k,v in vnf.items() if k in filter_keys ) + filtered_content = dict( (k,v) for k,v in vnf.iteritems() if k in filter_keys ) #change_keys_http2db(filtered_content, http2db_vnf, reverse=True) data={'vnf' : filtered_content} #GET VM @@ -1580,7 +1580,7 @@ def get_hosts_info(mydb, nfvo_tenant_id, datacenter_name=None): return result, vims elif result == 0: return -HTTP_Not_Found, "datacenter '%s' not found" % datacenter_name - myvim = list(vims.values())[0] + myvim = vims.values()[0] result,servers = myvim.get_hosts_info() if result < 0: return result, servers @@ -1595,7 +1595,7 @@ def get_hosts(mydb, nfvo_tenant_id): elif len(vims)>1: #print "nfvo.datacenter_action() error. Several datacenters found" raise NfvoException("More than one datacenters found, try to identify with uuid", HTTP_Conflict) - myvim = list(vims.values())[0] + myvim = vims.values()[0] try: hosts = myvim.get_hosts() logger.debug('VIM hosts response: '+ yaml.safe_dump(hosts, indent=4, default_flow_style=False)) @@ -1643,7 +1643,7 @@ def new_scenario(mydb, tenant_id, topo): vnfs={} other_nets={} #external_networks, bridge_networks and data_networkds nodes = topo['topology']['nodes'] - for k in list(nodes.keys()): + for k in nodes.keys(): if nodes[k]['type'] == 'VNF': vnfs[k] = nodes[k] vnfs[k]['ifaces'] = {} @@ -1656,7 +1656,7 @@ def new_scenario(mydb, tenant_id, topo): #1.2: Check that VNF are present at database table vnfs. Insert uuid, description and external interfaces - for name,vnf in list(vnfs.items()): + for name,vnf in vnfs.items(): where={} where_or={"tenant_id": tenant_id, 'public': "true"} error_text = "" @@ -1692,12 +1692,12 @@ def new_scenario(mydb, tenant_id, topo): conections = topo['topology']['connections'] conections_list = [] conections_list_name = [] - for k in list(conections.keys()): + for k in conections.keys(): if type(conections[k]['nodes'])==dict: #dict with node:iface pairs - ifaces_list = list(conections[k]['nodes'].items()) + ifaces_list = conections[k]['nodes'].items() elif type(conections[k]['nodes'])==list: #list with dictionary ifaces_list=[] - conection_pair_list = [list(x.items()) for x in conections[k]['nodes']] + conection_pair_list = map(lambda x: x.items(), conections[k]['nodes'] ) for k2 in conection_pair_list: ifaces_list += k2 @@ -1761,7 +1761,7 @@ def new_scenario(mydb, tenant_id, topo): # del con[index] # del other_nets[k] #1.7: Check external_ports are present at database table datacenter_nets - for k,net in list(other_nets.items()): + for k,net in other_nets.items(): error_pos = "'topology':'nodes':'" + k + "'" if net['external']==False: if 'name' not in net: @@ -1809,7 +1809,7 @@ def new_scenario(mydb, tenant_id, topo): #print "con", con for index in range(0,len(con)): #check if this is connected to a external net - for net_key in list(other_nets.keys()): + for net_key in other_nets.keys(): if con[index][0]==net_key: if other_net_index>=0: error_text="There is some interface connected both to net '%s' and net '%s'" % (con[other_net_index][0], net_key) @@ -1880,8 +1880,8 @@ def new_scenario(mydb, tenant_id, topo): #1.8.2 check all interfaces from all vnfs if len(mgmt_net)>0: add_mgmt_net = False - for vnf in list(vnfs.values()): - for iface in list(vnf['ifaces'].values()): + for vnf in vnfs.values(): + for iface in vnf['ifaces'].values(): if iface['type']=='mgmt' and 'net_key' not in iface: #iface not connected iface['net_key'] = 'mgmt' @@ -1922,7 +1922,7 @@ def new_scenario_v02(mydb, tenant_id, scenario_dict, version): tenant_id=None # 1: Check that VNF are present at database table vnfs and update content into scenario dict - for name,vnf in scenario["vnfs"].items(): + for name,vnf in scenario["vnfs"].iteritems(): where={} where_or={"tenant_id": tenant_id, 'public': "true"} error_text = "" @@ -1956,7 +1956,7 @@ def new_scenario_v02(mydb, tenant_id, scenario_dict, version): # TODO? get internal-connections from db.nets and their profiles, and update scenario[vnfs][internal-connections] accordingly # 2: Insert net_key and ip_address at every vnf interface - for net_name, net in list(scenario["networks"].items()): + for net_name, net in scenario["networks"].items(): net_type_bridge = False net_type_data = False for iface_dict in net["interfaces"]: @@ -1966,7 +1966,7 @@ def new_scenario_v02(mydb, tenant_id, scenario_dict, version): elif version == "0.3": temp_dict = {iface_dict["vnf"] : iface_dict["vnf_interface"]} ip_address = iface_dict.get('ip_address', None) - for vnf, iface in list(temp_dict.items()): + for vnf, iface in temp_dict.items(): if vnf not in scenario["vnfs"]: error_text = "Error at 'networks':'{}':'interfaces' VNF '{}' not match any VNF at 'vnfs'".format( net_name, vnf) @@ -2054,7 +2054,7 @@ def new_nsd_v3(mydb, tenant_id, nsd_descriptor): db_ip_profiles_index = 0 uuid_list = [] nsd_uuid_list = [] - for nsd_yang in mynsd.nsd_catalog.nsd.values(): + for nsd_yang in mynsd.nsd_catalog.nsd.itervalues(): nsd = nsd_yang.get() # table sceanrios @@ -2076,7 +2076,7 @@ def new_nsd_v3(mydb, tenant_id, nsd_descriptor): # table sce_vnfs (constituent-vnfd) vnf_index2scevnf_uuid = {} vnf_index2vnf_uuid = {} - for vnf in nsd.get("constituent-vnfd").values(): + for vnf in nsd.get("constituent-vnfd").itervalues(): existing_vnf = mydb.get_rows(FROM="vnfs", WHERE={'osm_id': str(vnf["vnfd-id-ref"])[:255], 'tenant_id': tenant_id}) if not existing_vnf: @@ -2100,7 +2100,7 @@ def new_nsd_v3(mydb, tenant_id, nsd_descriptor): # table ip_profiles (ip-profiles) ip_profile_name2db_table_index = {} - for ip_profile in nsd.get("ip-profiles").values(): + for ip_profile in nsd.get("ip-profiles").itervalues(): db_ip_profile = { "ip_version": str(ip_profile["ip-profile-params"].get("ip-version", "ipv4")), "subnet_address": str(ip_profile["ip-profile-params"].get("subnet-address")), @@ -2110,7 +2110,7 @@ def new_nsd_v3(mydb, tenant_id, nsd_descriptor): "dhcp_count": str(ip_profile["ip-profile-params"]["dhcp-params"].get("count")), } dns_list = [] - for dns in ip_profile["ip-profile-params"]["dns-server"].values(): + for dns in ip_profile["ip-profile-params"]["dns-server"].itervalues(): dns_list.append(str(dns.get("address"))) db_ip_profile["dns_address"] = ";".join(dns_list) if ip_profile["ip-profile-params"].get('security-group'): @@ -2120,7 +2120,7 @@ def new_nsd_v3(mydb, tenant_id, nsd_descriptor): db_ip_profiles.append(db_ip_profile) # table sce_nets (internal-vld) - for vld in nsd.get("vld").values(): + for vld in nsd.get("vld").itervalues(): sce_net_uuid = str(uuid4()) uuid_list.append(sce_net_uuid) db_sce_net = { @@ -2153,7 +2153,7 @@ def new_nsd_v3(mydb, tenant_id, nsd_descriptor): db_ip_profiles[ip_profile_name2db_table_index[ip_profile_name]]["sce_net_id"] = sce_net_uuid # table sce_interfaces (vld:vnfd-connection-point-ref) - for iface in vld.get("vnfd-connection-point-ref").values(): + for iface in vld.get("vnfd-connection-point-ref").itervalues(): vnf_index = int(iface['member-vnf-index-ref']) # check correct parameters if vnf_index not in vnf_index2vnf_uuid: @@ -2592,13 +2592,13 @@ def get_datacenter_by_name_uuid(mydb, tenant_id, datacenter_id_name=None, **extr elif len(vims)>1: #print "nfvo.datacenter_action() error. Several datacenters found" raise NfvoException("More than one datacenters found, try to identify with uuid", HTTP_Conflict) - return list(vims.keys())[0], list(vims.values())[0] + return vims.keys()[0], vims.values()[0] def update(d, u): '''Takes dict d and updates it with the values in dict u.''' '''It merges all depth levels''' - for k, v in u.items(): + for k, v in u.iteritems(): if isinstance(v, collections.Mapping): r = update(d.get(k, {}), v) d[k] = r @@ -2670,7 +2670,7 @@ def create_instance(mydb, tenant_id, instance_dict): # yaml.safe_dump(scenarioDict, indent=4, default_flow_style=False)) try: # 0 check correct parameters - for net_name, net_instance_desc in instance_dict.get("networks", {}).items(): + for net_name, net_instance_desc in instance_dict.get("networks", {}).iteritems(): found = False for scenario_net in scenarioDict['nets']: if net_name == scenario_net["name"]: @@ -2698,7 +2698,7 @@ def create_instance(mydb, tenant_id, instance_dict): site_without_datacenter_field = True site["datacenter"] = default_datacenter_id # change name to id - for vnf_name, vnf_instance_desc in instance_dict.get("vnfs",{}).items(): + for vnf_name, vnf_instance_desc in instance_dict.get("vnfs",{}).iteritems(): found = False for scenario_vnf in scenarioDict['vnfs']: if vnf_name == scenario_vnf['name']: @@ -2725,7 +2725,7 @@ def create_instance(mydb, tenant_id, instance_dict): # 0.2 merge instance information into scenario # Ideally, the operation should be as simple as: update(scenarioDict,instance_dict) # However, this is not possible yet. - for net_name, net_instance_desc in instance_dict.get("networks",{}).items(): + for net_name, net_instance_desc in instance_dict.get("networks",{}).iteritems(): for scenario_net in scenarioDict['nets']: if net_name == scenario_net["name"]: if 'ip-profile' in net_instance_desc: @@ -3185,7 +3185,7 @@ def create_instance(mydb, tenant_id, instance_dict): logger.debug("create_instance done DB tables: %s", yaml.safe_dump(db_tables, indent=4, default_flow_style=False) ) mydb.new_rows(db_tables, uuid_list) - for myvim_thread_id in list(myvim_threads_id.values()): + for myvim_thread_id in myvim_threads_id.values(): vim_threads["running"][myvim_thread_id].insert_task(db_vim_actions) returned_instance = mydb.get_instance_scenario(instance_uuid) @@ -3250,7 +3250,7 @@ def delete_instance(mydb, tenant_id, instance_id): sce_vnf["datacenter_tenant_id"])) myvims[datacenter_key] = None else: - myvims[datacenter_key] = list(vims.values())[0] + myvims[datacenter_key] = vims.values()[0] myvim = myvims[datacenter_key] myvim_thread = myvim_threads[datacenter_key] for vm in sce_vnf['vms']: @@ -3302,7 +3302,7 @@ def delete_instance(mydb, tenant_id, instance_id): logger.error("datacenter '{}' with datacenter_tenant_id '{}' not found".format(net["datacenter_id"], net["datacenter_tenant_id"])) myvims[datacenter_key] = None else: - myvims[datacenter_key] = list(vims.values())[0] + myvims[datacenter_key] = vims.values()[0] myvim = myvims[datacenter_key] myvim_thread = myvim_threads[datacenter_key] @@ -3344,7 +3344,7 @@ def delete_instance(mydb, tenant_id, instance_id): logger.debug("delete_instance done DB tables: %s", yaml.safe_dump(db_tables, indent=4, default_flow_style=False)) mydb.new_rows(db_tables, ()) - for myvim_thread_id in list(vimthread_affected.keys()): + for myvim_thread_id in vimthread_affected.keys(): vim_threads["running"][myvim_thread_id].insert_task(db_vim_actions) if len(error_msg) > 0: @@ -3527,7 +3527,7 @@ def instance_action(mydb,nfvo_tenant,instance_id, action_dict): vims = get_vim(mydb, nfvo_tenant, instanceDict['datacenter_id']) if len(vims) == 0: raise NfvoException("datacenter '{}' not found".format(str(instanceDict['datacenter_id'])), HTTP_Not_Found) - myvim = list(vims.values())[0] + myvim = vims.values()[0] if action_dict.get("create-vdu"): for vdu in action_dict["create-vdu"]: @@ -4199,12 +4199,12 @@ def vim_action_get(mydb, tenant_id, datacenter, item, name): if name and len(content)==1: return {item[:-1]: content[0]} elif name and len(content)==0: - raise NfvoException("No {} found with ".format(item[:-1]) + " and ".join([str(x[0])+": "+str(x[1]) for x in iter(filter_dict.items())]), + raise NfvoException("No {} found with ".format(item[:-1]) + " and ".join(map(lambda x: str(x[0])+": "+str(x[1]), filter_dict.iteritems())), datacenter) else: return {item: content} except vimconn.vimconnException as e: - print("vim_action Not possible to get_%s_list from VIM: %s " % (item, str(e))) + print "vim_action Not possible to get_%s_list from VIM: %s " % (item, str(e)) raise NfvoException("Not possible to get_{}_list from VIM: {}".format(item, str(e)), e.http_code) @@ -4217,7 +4217,7 @@ def vim_action_delete(mydb, tenant_id, datacenter, item, name): #get uuid name content = vim_action_get(mydb, tenant_id, datacenter, item, name) logger.debug("vim_action_delete vim response: " + str(content)) - items = list(content.values())[0] + items = content.values()[0] if type(items)==list and len(items)==0: raise NfvoException("Not found " + item, HTTP_Not_Found) elif type(items)==list and len(items)>1: diff --git a/osm_ro/nfvo_db.py b/osm_ro/nfvo_db.py index 25196dde..f47ad162 100644 --- a/osm_ro/nfvo_db.py +++ b/osm_ro/nfvo_db.py @@ -27,7 +27,7 @@ NFVO DB engine. It implements all the methods to interact with the Openmano Data __author__="Alfonso Tierno, Gerardo Garcia, Pablo Montes" __date__ ="$28-aug-2014 10:05:01$" -from . import db_base +import db_base import MySQLdb as mdb import json import yaml @@ -66,7 +66,7 @@ class nfvo_db(db_base.db_base): #print "Adding new vms to the NFVO database" #For each vm, we must create the appropriate vm in the NFVO database. vmDict = {} - for _,vm in VNFCDict.items(): + for _,vm in VNFCDict.iteritems(): #This code could make the name of the vms grow and grow. #If we agree to follow this convention, we should check with a regex that the vnfc name is not including yet the vnf name #vm['name'] = "%s-%s" % (vnf_name,vm['name']) @@ -218,7 +218,7 @@ class nfvo_db(db_base.db_base): #print "Adding new vms to the NFVO database" #For each vm, we must create the appropriate vm in the NFVO database. vmDict = {} - for _,vm in VNFCDict.items(): + for _,vm in VNFCDict.iteritems(): #This code could make the name of the vms grow and grow. #If we agree to follow this convention, we should check with a regex that the vnfc name is not including yet the vnf name #vm['name'] = "%s-%s" % (vnf_name,vm['name']) @@ -389,7 +389,7 @@ class nfvo_db(db_base.db_base): scenario_uuid = self._new_row_internal('scenarios', INSERT_, add_uuid=True, root_uuid=None, created_time=created_time) #sce_nets - for net in list(scenario_dict['nets'].values()): + for net in scenario_dict['nets'].values(): net_dict={'scenario_id': scenario_uuid} net_dict["name"] = net["name"] net_dict["type"] = net["type"] @@ -418,7 +418,7 @@ class nfvo_db(db_base.db_base): self._new_row_internal('ip_profiles', myIPProfileDict) # sce_vnfs - for k, vnf in list(scenario_dict['vnfs'].items()): + for k, vnf in scenario_dict['vnfs'].items(): INSERT_ = {'scenario_id': scenario_uuid, 'name': k, 'vnf_id': vnf['uuid'], @@ -433,7 +433,7 @@ class nfvo_db(db_base.db_base): root_uuid=scenario_uuid, created_time=created_time) vnf['scn_vnf_uuid']=scn_vnf_uuid # sce_interfaces - for iface in list(vnf['ifaces'].values()): + for iface in vnf['ifaces'].values(): # print 'iface', iface if 'net_key' not in iface: continue @@ -488,7 +488,7 @@ class nfvo_db(db_base.db_base): WHERE_={'tenant_id': tenant_id, 'uuid': scenario_uuid} item_changed += self._update_rows('scenarios', UPDATE_, WHERE_, modified_time=modified_time) #sce_nets - for node_id, node in list(nodes.items()): + for node_id, node in nodes.items(): if "graph" in node: #node["graph"] = yaml.safe_dump(node["graph"],default_flow_style=True,width=256) #TODO, must be json because of the GUI, change to yaml @@ -759,7 +759,7 @@ class nfvo_db(db_base.db_base): with self.con: self.cur = self.con.cursor() for table in tables: - for table_name, row_list in list(table.items()): + for table_name, row_list in table.items(): index = 0 if isinstance(row_list, dict): row_list = (row_list, ) #create a list with the single value @@ -810,7 +810,7 @@ class nfvo_db(db_base.db_base): net["vim_id_sites"]["datacenter_site_id"] = {datacenter_site_id: net['vim_id']} sce_net_id = net.get("uuid") - for datacenter_site_id,vim_id in net["vim_id_sites"].items(): + for datacenter_site_id,vim_id in net["vim_id_sites"].iteritems(): INSERT_={'vim_net_id': vim_id, 'created': net.get('created', False), 'instance_scenario_id':instance_uuid } #, 'type': net['type'] INSERT_['datacenter_id'] = datacenter_site_id INSERT_['datacenter_tenant_id'] = scenarioDict["datacenter2tenant"][datacenter_site_id] diff --git a/osm_ro/openmanoclient.py b/osm_ro/openmanoclient.py index 07aead3b..15662037 100644 --- a/osm_ro/openmanoclient.py +++ b/osm_ro/openmanoclient.py @@ -40,7 +40,7 @@ version_date = "Oct 2017" if sys.version_info.major == 3: from urllib.parse import quote elif sys.version_info.major == 2: - from urllib.parse import quote + from urllib import quote class OpenmanoException(Exception): '''Common Exception for all openmano client exceptions''' diff --git a/osm_ro/utils.py b/osm_ro/utils.py index 20646a14..00f6f2d2 100644 --- a/osm_ro/utils.py +++ b/osm_ro/utils.py @@ -62,7 +62,7 @@ def format_in(http_response, schema): #print "Input data: ", str(client_data) return True, client_data except js_e.ValidationError as exc: - print("validate_in error, jsonschema exception ", exc.message, "at", exc.path) + print "validate_in error, jsonschema exception ", exc.message, "at", exc.path return False, ("validate_in error, jsonschema exception ", exc.message, "at", exc.path) def remove_extra_items(data, schema): @@ -75,8 +75,8 @@ def remove_extra_items(data, schema): #TODO deal with patternProperties if 'properties' not in schema: return None - for k in list(data.keys()): - if k not in list(schema['properties'].keys()): + for k in data.keys(): + if k not in schema['properties'].keys(): del data[k] deleted.append(k) else: @@ -102,7 +102,7 @@ def convert_bandwidth(data, reverse=False): None ''' if type(data) is dict: - for k in list(data.keys()): + for k in data.keys(): if type(data[k]) is dict or type(data[k]) is tuple or type(data[k]) is list: convert_bandwidth(data[k], reverse) if "bandwidth" in data: @@ -119,7 +119,7 @@ def convert_bandwidth(data, reverse=False): if value % 1000 == 0: data["bandwidth"]=str(value/1000) + " Gbps" else: data["bandwidth"]=str(value) + " Mbps" except: - print("convert_bandwidth exception for type", type(data["bandwidth"]), " data", data["bandwidth"]) + print "convert_bandwidth exception for type", type(data["bandwidth"]), " data", data["bandwidth"] return if type(data) is tuple or type(data) is list: for k in data: @@ -133,7 +133,7 @@ def convert_datetime2str(var): It enters recursively in the dict var finding this kind of variables ''' if type(var) is dict: - for k,v in list(var.items()): + for k,v in var.items(): if type(v) is datetime.datetime: var[k]= v.strftime('%Y-%m-%dT%H:%M:%S') elif type(v) is dict or type(v) is list or type(v) is tuple: @@ -153,7 +153,7 @@ def convert_str2boolean(data, items): None ''' if type(data) is dict: - for k in list(data.keys()): + for k in data.keys(): if type(data[k]) is dict or type(data[k]) is tuple or type(data[k]) is list: convert_str2boolean(data[k], items) if k in items: diff --git a/osm_ro/vim_thread.py b/osm_ro/vim_thread.py index 8ce029f8..22a882ed 100644 --- a/osm_ro/vim_thread.py +++ b/osm_ro/vim_thread.py @@ -57,11 +57,11 @@ The task content are (M: stored at memory, D: stored at database): import threading import time -import queue +import Queue import logging -from . import vimconn +import vimconn import yaml -from .db_base import db_base_Exception +from db_base import db_base_Exception from lib_osm_openvim.ovim import ovimException __author__ = "Alfonso Tierno, Pablo Montes" @@ -116,7 +116,7 @@ class vim_thread(threading.Thread): self.db_lock = db_lock self.task_lock = task_lock - self.task_queue = queue.Queue(2000) + self.task_queue = Queue.Queue(2000) self.refresh_tasks = [] """Contains time ordered task list for refreshing the status of VIM VMs and nets""" @@ -206,7 +206,7 @@ class vim_thread(threading.Thread): try: now = time.time() vim_dict = self.vim.refresh_vms_status(vm_to_refresh_list) - for vim_id, vim_info in list(vim_dict.items()): + for vim_id, vim_info in vim_dict.items(): # look for task task_need_update = False task = vm_to_refresh_dict[vim_id] @@ -309,7 +309,7 @@ class vim_thread(threading.Thread): try: now = time.time() vim_dict = self.vim.refresh_nets_status(net_to_refresh_list) - for vim_id, vim_info in list(vim_dict.items()): + for vim_id, vim_info in vim_dict.items(): # look for task task = net_to_refresh_dict[vim_id] self.logger.debug("get-net net_id=%s result=%s", task["vim_id"], str(vim_info)) @@ -557,7 +557,7 @@ class vim_thread(threading.Thread): try: self.task_queue.put(task, False) return None - except queue.Full: + except Queue.Full: raise vimconn.vimconnException(self.name + ": timeout inserting a task") def del_task(self, task): @@ -688,7 +688,7 @@ class vim_thread(threading.Thread): vm_vim_id = task["vim_id"] interfaces = task["extra"].get("interfaces", ()) try: - for iface in list(interfaces.values()): + for iface in interfaces.values(): if iface.get("sdn_port_id"): try: with self.db_lock: diff --git a/osm_ro/vimconn.py b/osm_ro/vimconn.py index ba3b1e20..d8921662 100644 --- a/osm_ro/vimconn.py +++ b/osm_ro/vimconn.py @@ -28,25 +28,25 @@ vimconn implement an Abstract class for the vim connector plugins __author__="Alfonso Tierno, Igor D.C." __date__ ="$14-aug-2017 23:59:59$" +import io import logging import paramiko import socket -import io import yaml import sys from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText -#Error variables +#Error variables HTTP_Bad_Request = 400 -HTTP_Unauthorized = 401 -HTTP_Not_Found = 404 -HTTP_Method_Not_Allowed = 405 +HTTP_Unauthorized = 401 +HTTP_Not_Found = 404 +HTTP_Method_Not_Allowed = 405 HTTP_Request_Timeout = 408 HTTP_Conflict = 409 HTTP_Not_Implemented = 501 -HTTP_Service_Unavailable = 503 -HTTP_Internal_Server_Error = 500 +HTTP_Service_Unavailable = 503 +HTTP_Internal_Server_Error = 500 class vimconnException(Exception): """Common and base class Exception for all vimconnector exceptions""" @@ -58,7 +58,7 @@ class vimconnConnectionException(vimconnException): """Connectivity error with the VIM""" def __init__(self, message, http_code=HTTP_Service_Unavailable): vimconnException.__init__(self, message, http_code) - + class vimconnUnexpectedResponse(vimconnException): """Get an wrong response from VIM""" def __init__(self, message, http_code=HTTP_Service_Unavailable): @@ -92,9 +92,9 @@ class vimconnNotImplemented(vimconnException): class vimconnector(): """Abstract base class for all the VIM connector plugins - These plugins must implement a vimconnector class derived from this + These plugins must implement a vimconnector class derived from this and all these privated methods - """ + """ def __init__(self, uuid, name, tenant_id, tenant_name, url, url_admin=None, user=None, passwd=None, log_level=None, config={}, persitent_info={}): """Constructor of VIM @@ -127,9 +127,9 @@ class vimconnector(): self.logger = logging.getLogger('openmano.vim') if log_level: self.logger.setLevel( getattr(logging, log_level) ) - if not self.url_admin: #try to use normal url + if not self.url_admin: #try to use normal url self.url_admin = self.url - + def __getitem__(self,index): if index=='tenant_id': return self.tenant_id @@ -151,7 +151,7 @@ class vimconnector(): return self.config else: raise KeyError("Invalid key '%s'" %str(index)) - + def __setitem__(self,index, value): if index=='tenant_id': self.tenant_id = value @@ -429,7 +429,7 @@ class vimconnector(): - name: interface name dedicated: yes|no|yes:sriov; for PT, SRIOV or only one SRIOV for the physical NIC bandwidth: X Gbps; requested guarantee bandwidth - vpci: requested virtual PCI address + vpci: requested virtual PCI address disk: disk size is_public: #TODO to concrete @@ -457,7 +457,7 @@ class vimconnector(): Returns the image_id or raises a vimconnNotFoundException """ raise vimconnNotImplemented( "Should have implemented this" ) - + def get_image_list(self, filter_dict={}): """Obtain tenant images from VIM Filter_dict can be: @@ -522,11 +522,11 @@ class vimconnector(): Returns the instance identifier or raises an exception on error """ raise vimconnNotImplemented( "Should have implemented this" ) - + def get_vminstance(self,vm_id): """Returns the VM instance information from VIM""" raise vimconnNotImplemented( "Should have implemented this" ) - + def delete_vminstance(self, vm_id): """Removes a VM instance from VIM Returns the instance identifier""" @@ -539,14 +539,14 @@ class vimconnector(): vm_id: #VIM id of this Virtual Machine status: #Mandatory. Text with one of: # DELETED (not found at vim) - # VIM_ERROR (Cannot connect to VIM, VIM response error, ...) + # VIM_ERROR (Cannot connect to VIM, VIM response error, ...) # OTHER (Vim reported other status not understood) # ERROR (VIM indicates an ERROR status) - # ACTIVE, PAUSED, SUSPENDED, INACTIVE (not running), + # ACTIVE, PAUSED, SUSPENDED, INACTIVE (not running), # BUILD (on building process), ERROR # ACTIVE:NoMgmtIP (Active but any of its interface has an IP address # - error_msg: #Text with VIM error message, if any. Or the VIM connection ERROR + error_msg: #Text with VIM error message, if any. Or the VIM connection ERROR vim_info: #Text with plain information obtained from vim (yaml.safe_dump) interfaces: list with interface info. Each item a dictionary with: vim_info: #Text with plain information obtained from vim (yaml.safe_dump) @@ -559,25 +559,25 @@ class vimconnector(): vlan: #physical VLAN used for VF """ raise vimconnNotImplemented( "Should have implemented this" ) - + def action_vminstance(self, vm_id, action_dict): """Send and action over a VM instance from VIM Returns the vm_id if the action was successfully sent to the VIM""" raise vimconnNotImplemented( "Should have implemented this" ) - + def get_vminstance_console(self, vm_id, console_type="vnc"): """ Get a console for the virtual machine Params: vm_id: uuid of the VM console_type, can be: - "novnc" (by default), "xvpvnc" for VNC types, + "novnc" (by default), "xvpvnc" for VNC types, "rdp-html5" for RDP types, "spice-html5" for SPICE types Returns dict with the console parameters: protocol: ssh, ftp, http, https, ... - server: usually ip address - port: the http, ssh, ... port - suffix: extra text, e.g. the http path and query string + server: usually ip address + port: the http, ssh, ... port + suffix: extra text, e.g. the http path and query string """ raise vimconnNotImplemented( "Should have implemented this" ) @@ -840,17 +840,17 @@ class vimconnector(): def get_processor_rankings(self): """Get the processor rankings in the VIM database""" raise vimconnNotImplemented( "Should have implemented this" ) - + def new_host(self, host_data): """Adds a new host to VIM""" """Returns status code of the VIM response""" raise vimconnNotImplemented( "Should have implemented this" ) - + def new_external_port(self, port_data): """Adds a external port to VIM""" """Returns the port identifier""" raise vimconnNotImplemented( "Should have implemented this" ) - + def new_external_network(self,net_name,net_type): """Adds a external network to VIM (shared)""" """Returns the network identifier""" @@ -865,4 +865,3 @@ class vimconnector(): """Adds a VM instance to VIM""" """Returns the instance identifier""" raise vimconnNotImplemented( "Should have implemented this" ) - diff --git a/osm_ro/vimconn_aws.py b/osm_ro/vimconn_aws.py index 9b13030a..3ccef44a 100644 --- a/osm_ro/vimconn_aws.py +++ b/osm_ro/vimconn_aws.py @@ -28,7 +28,7 @@ AWS-connector implements all the methods to interact with AWS using the BOTO cli __author__ = "Saboor Ahmad" __date__ = "10-Apr-2017" -from . import vimconn +import vimconn import yaml import logging import netaddr @@ -275,7 +275,7 @@ class vimconnector(vimconn.vimconnector): pub_subs = pub_split[:3] subnets = pub_subs + pri_subs - return list(map(str, subnets)) + return map(str, subnets) def new_network(self, net_name, net_type, ip_profile=None, shared=False, vlan=None): """Adds a tenant network to VIM @@ -470,7 +470,7 @@ class vimconnector(vimconn.vimconnector): self.logger.debug("Getting flavor id from data") try: flavor = None - for key, values in self.flavor_info.items(): + for key, values in self.flavor_info.iteritems(): if (values["ram"], values["cpus"], values["disk"]) == ( flavor_dict["ram"], flavor_dict["vcpus"], flavor_dict["disk"]): flavor = (key, values) diff --git a/osm_ro/vimconn_openstack.py b/osm_ro/vimconn_openstack.py index 44178a81..51838587 100644 --- a/osm_ro/vimconn_openstack.py +++ b/osm_ro/vimconn_openstack.py @@ -35,7 +35,7 @@ to the VIM connector's SFC resources as follows: __author__ = "Alfonso Tierno, Gerardo Garcia, Pablo Montes, xFlow Research, Igor D.C." __date__ = "$22-sep-2017 23:59:59$" -from . import vimconn +import vimconn import json import logging import netaddr @@ -55,6 +55,7 @@ from glanceclient import client as glClient import glanceclient.client as gl1Client import glanceclient.exc as gl1Exceptions from cinderclient import client as cClient +#from httplib import HTTPException from http.client import HTTPException from neutronclient.neutron import client as neClient from neutronclient.common import exceptions as neExceptions @@ -156,21 +157,31 @@ class vimconnector(vimconn.vimconnector): '''Called before any operation, it check if credentials has changed Throw keystoneclient.apiclient.exceptions.AuthorizationFailure ''' - #TODO control the timing and possible token timeout, but it seams that python client does this task for us :-) + #TODO control the timing and possible token timeout, but it seams that python client does this task for us :-) if self.session['reload_client']: if self.config.get('APIversion'): self.api_version3 = self.config['APIversion'] == 'v3.3' or self.config['APIversion'] == '3' else: # get from ending auth_url that end with v3 or with v2.0 - self.api_version3 = self.url.split("/")[-1] == "v3" + self.api_version3 = self.url.endswith("/v3") or self.url.endswith("/v3/") self.session['api_version3'] = self.api_version3 if self.api_version3: + if self.config.get('project_domain_id') or self.config.get('project_domain_name'): + project_domain_id_default = None + else: + project_domain_id_default = 'default' + if self.config.get('user_domain_id') or self.config.get('user_domain_name'): + user_domain_id_default = None + else: + user_domain_id_default = 'default' auth = v3.Password(auth_url=self.url, username=self.user, password=self.passwd, project_name=self.tenant_name, project_id=self.tenant_id, - project_domain_id=self.config.get('project_domain_id', 'default'), - user_domain_id=self.config.get('user_domain_id', 'default')) + project_domain_id=self.config.get('project_domain_id', project_domain_id_default), + user_domain_id=self.config.get('user_domain_id', user_domain_id_default), + project_domain_name=self.config.get('project_domain_name'), + user_domain_name=self.config.get('user_domain_name')) else: auth = v2.Password(auth_url=self.url, username=self.user, @@ -383,7 +394,7 @@ class vimconnector(vimconn.vimconnector): else: project = self.keystone.tenants.create(tenant_name, tenant_description) return project.id - except (ksExceptions.ConnectionError, ksExceptions.ClientException, ConnectionError) as e: + except (ksExceptions.ConnectionError, ksExceptions.ClientException, ConnectionError) as e: self._format_exception(e) def delete_tenant(self, tenant_id): @@ -396,7 +407,7 @@ class vimconnector(vimconn.vimconnector): else: self.keystone.tenants.delete(tenant_id) return tenant_id - except (ksExceptions.ConnectionError, ksExceptions.ClientException, ConnectionError) as e: + except (ksExceptions.ConnectionError, ksExceptions.ClientException, ConnectionError) as e: self._format_exception(e) def new_network(self,net_name, net_type, ip_profile=None, shared=False, vlan=None): @@ -541,13 +552,13 @@ class vimconnector(vimconn.vimconnector): net_id: #VIM id of this network status: #Mandatory. Text with one of: # DELETED (not found at vim) - # VIM_ERROR (Cannot connect to VIM, VIM response error, ...) + # VIM_ERROR (Cannot connect to VIM, VIM response error, ...) # OTHER (Vim reported other status not understood) # ERROR (VIM indicates an ERROR status) - # ACTIVE, INACTIVE, DOWN (admin down), + # ACTIVE, INACTIVE, DOWN (admin down), # BUILD (on building process) # - error_msg: #Text with VIM error message, if any. Or the VIM connection ERROR + error_msg: #Text with VIM error message, if any. Or the VIM connection ERROR vim_info: #Text with plain information obtained from vim (yaml.safe_dump) ''' @@ -698,7 +709,7 @@ class vimconnector(vimconn.vimconnector): # 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"="