X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_ro%2Fnfvo_db.py;h=071d03abe5cdcfe3599765d7b9a87615594bd9b3;hb=a92a0eaaf370c626b442863f4127cd11fc64754c;hp=ac392c6dea51142532eed67dd13afb67c693c6ab;hpb=34b93bac8a6cf769b996652605a2e43c18448728;p=osm%2FRO.git diff --git a/osm_ro/nfvo_db.py b/osm_ro/nfvo_db.py index ac392c6d..071d03ab 100644 --- a/osm_ro/nfvo_db.py +++ b/osm_ro/nfvo_db.py @@ -38,6 +38,7 @@ tables_with_createdat_field=["datacenters","instance_nets","instance_scenarios", "interfaces","nets","nfvo_tenants","scenarios","sce_interfaces","sce_nets", "sce_vnfs","tenants_datacenters","datacenter_tenants","vms","vnfs", "datacenter_nets"] + class nfvo_db(db_base.db_base): def __init__(self, host=None, user=None, passwd=None, database=None, log_name='openmano.db', log_level=None): db_base.db_base.__init__(self, host, user, passwd, database, log_name, log_level) @@ -585,15 +586,19 @@ class nfvo_db(db_base.db_base): scenario_dict['vnfs'] = self.cur.fetchall() for vnf in scenario_dict['vnfs']: #sce_interfaces - cmd = "SELECT scei.uuid,scei.sce_net_id,scei.interface_id,i.external_name,scei.ip_address FROM sce_interfaces as scei join interfaces as i on scei.interface_id=i.uuid WHERE scei.sce_vnf_id='{}' ORDER BY scei.created_at".format(vnf['uuid']) + cmd = "SELECT scei.uuid,scei.sce_net_id,scei.interface_id,i.external_name,scei.ip_address"\ + " FROM sce_interfaces as scei join interfaces as i on scei.interface_id=i.uuid"\ + " WHERE scei.sce_vnf_id='{}' ORDER BY scei.created_at".format(vnf['uuid']) self.logger.debug(cmd) self.cur.execute(cmd) vnf['interfaces'] = self.cur.fetchall() #vms - cmd = "SELECT vms.uuid as uuid, flavor_id, image_id, vms.name as name, vms.description as description, vms.boot_data as boot_data " \ - " FROM vnfs join vms on vnfs.uuid=vms.vnf_id " \ - " WHERE vnfs.uuid='" + vnf['vnf_id'] +"'" \ - " ORDER BY vms.created_at" + cmd = "SELECT vms.uuid as uuid, flavor_id, image_id, vms.name as name," \ + " vms.description as description, vms.boot_data as boot_data, count," \ + " vms.availability_zone as availability_zone" \ + " FROM vnfs join vms on vnfs.uuid=vms.vnf_id" \ + " WHERE vnfs.uuid='" + vnf['vnf_id'] + "'" \ + " ORDER BY vms.created_at" self.logger.debug(cmd) self.cur.execute(cmd) vnf['vms'] = self.cur.fetchall() @@ -720,6 +725,43 @@ class nfvo_db(db_base.db_base): self._format_error(e, tries, "delete", "instances running") tries -= 1 + def new_rows(self, tables, uuid_list=None): + """ + Make a transactional insertion of rows at several tables + :param tables: list with dictionary where the keys are the table names and the values are a row or row list + with the values to be inserted at the table. Each row is a dictionary with the key values. E.g.: + tables = [ + {"table1": [ {"column1": value, "column2: value, ... }, {"column1": value, "column2: value, ... }, ...], + {"table2": [ {"column1": value, "column2: value, ... }, {"column1": value, "column2: value, ... }, ...], + {"table3": {"column1": value, "column2: value, ... } + } + :param uuid_list: list of created uuids, first one is the root (#TODO to store at uuid table) + :return: None if success, raise exception otherwise + """ + tries = 2 + while tries: + created_time = time.time() + try: + with self.con: + self.cur = self.con.cursor() + for table in tables: + 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 + for row in row_list: + if table_name in self.tables_with_created_field: + created_time_param = created_time + index*0.00001 + else: + created_time_param=0 + self._new_row_internal(table_name, row, add_uuid=False, root_uuid=None, + created_time=created_time_param) + index += 1 + return + except (mdb.Error, AttributeError) as e: + self._format_error(e, tries) + tries -= 1 + def new_instance_scenario_as_a_whole(self,tenant_id,instance_scenario_name,instance_scenario_description,scenarioDict): tries = 2 while tries: