dac751d04b
Change-Id: I7a88d9bec69371bec1004572a4fa87cdfbbf1f28
216 lines
7.0 KiB
Python
216 lines
7.0 KiB
Python
import config as conf
|
|
import logging
|
|
import sqlalchemy
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
db_engines = {}
|
|
|
|
|
|
def _db_create_engine(db_name):
|
|
global db_engines
|
|
if db_name not in db_engines:
|
|
db_address = 'mysql://{}:{}@{}:{}/{}'.format(conf.sql_user,
|
|
conf.sql_password,
|
|
conf.sql_server,
|
|
conf.sql_port,
|
|
db_name)
|
|
db_engines[db_name] = sqlalchemy.create_engine(db_address)
|
|
return db_engines
|
|
|
|
|
|
def _get_db_info(service):
|
|
if service.upper() == 'CMS':
|
|
db_name = conf.cms_db_name
|
|
table_col = conf.customer_tbl_column
|
|
table_name = conf.customer_table_name
|
|
region_table_name = conf.customer_region_table_name
|
|
|
|
elif service.upper() == 'FMS':
|
|
db_name = conf.fms_db_name
|
|
table_col = conf.flavor_tbl_column
|
|
table_name = conf.flavor_table_name
|
|
region_table_name = conf.flavor_region_table_name
|
|
|
|
elif service.upper() == 'IMS':
|
|
db_name = conf.ims_db_name
|
|
table_col = conf.image_tbl_column
|
|
table_name = conf.image_table_name
|
|
region_table_name = conf.image_region_table_name
|
|
|
|
return db_name, table_name, table_col, region_table_name
|
|
|
|
|
|
def _run_query(query, db_name):
|
|
db_engines = _db_create_engine(db_name)
|
|
connection = db_engines[db_name].connect()
|
|
try:
|
|
sqlres = connection.execute(query)
|
|
except Exception as exp:
|
|
sqlres = None
|
|
log.error("fail to delete resource {}".format(exp))
|
|
finally:
|
|
# close the connection
|
|
connection.close()
|
|
# db_engines[db_name].dispose()
|
|
return sqlres
|
|
|
|
|
|
def _build_delet_resource_status_query(resource_id, table_name):
|
|
query = '''
|
|
DELETE from %s
|
|
WHERE resource_id = '%s'
|
|
''' % (table_name, resource_id)
|
|
return query
|
|
|
|
|
|
def _build_delete_image_metadata(resource_id, image_metadata_table,
|
|
resource_table):
|
|
query = '''
|
|
DELETE from %s
|
|
WHERE image_meta_data_id in
|
|
(SELECT id from %s where resource_id = '%s')
|
|
''' % (image_metadata_table, resource_table, resource_id)
|
|
return query
|
|
|
|
|
|
def _build_delete_resource_query(resource_id, table_col, table_name):
|
|
query = '''
|
|
DELETE from %s
|
|
WHERE %s.%s = '%s'
|
|
''' % (table_name, table_name, table_col, resource_id)
|
|
return query
|
|
|
|
|
|
def _build_get_cms_regions_query(resource_id, table_name):
|
|
query = '''
|
|
select region_id from %s
|
|
WHERE customer_id = '%s' and region_id != '-1'
|
|
''' % (table_name, resource_id)
|
|
return query
|
|
|
|
|
|
def _build_get_fms_regions_query(resource_id, table_name):
|
|
query = '''
|
|
select region_name from %s
|
|
WHERE flavor_internal_id = '%s'
|
|
''' % (table_name, resource_id)
|
|
return query
|
|
|
|
|
|
def _build_get_ims_regions_query(resource_id, table_name):
|
|
query = '''
|
|
select region_name from %s
|
|
WHERE image_id = '%s'
|
|
''' % (table_name, resource_id)
|
|
return query
|
|
|
|
|
|
def _build_get_resource_id_query(resource_id, table_col, table_name):
|
|
query = '''
|
|
select * from %s
|
|
WHERE %s.%s = '%s'
|
|
''' % (table_name, table_name, table_col, resource_id)
|
|
return query
|
|
|
|
|
|
def remove_resource_id(resource_id, service):
|
|
db_name, table_name, table_col, region_table_name = _get_db_info(service)
|
|
resource_type = table_name
|
|
query = _build_delete_resource_query(resource_id, table_col, table_name)
|
|
log.debug("DB---: deleting {}, query {}".format(resource_type, query))
|
|
_run_query(query, db_name)
|
|
return
|
|
|
|
|
|
def remove_rds_resource_status(resource_id):
|
|
query = _build_delet_resource_status_query(resource_id,
|
|
conf.resource_status_table_name)
|
|
log.debug("DB---: deleting resource status, query {}".format(query))
|
|
_run_query(query, conf.rds_db_name)
|
|
return
|
|
|
|
|
|
def remove_rds_image_metadata(resource_id):
|
|
query = _build_delete_image_metadata(resource_id,
|
|
conf.image_metadata_table_name,
|
|
conf.resource_status_table_name)
|
|
log.debug("DB---: deleting image_metadata, query {}".format(query))
|
|
_run_query(query, conf.rds_db_name)
|
|
return
|
|
|
|
|
|
def get_cms_db_resource_regions(resource_id, service):
|
|
regions = None
|
|
db_name, table_name, table_col, region_table_name = _get_db_info(service)
|
|
|
|
query = _build_get_resource_id_query(resource_id, table_col, table_name)
|
|
result = _run_query(query, db_name)
|
|
if not result.rowcount > 0:
|
|
raise Exception('resource {} not found'.format(resource_id))
|
|
resource_internal_id = result.first().__getitem__('id')
|
|
log.debug("got resource internal id {}".format(resource_internal_id))
|
|
# from resource id get regions
|
|
query = _build_get_cms_regions_query(resource_internal_id,
|
|
region_table_name)
|
|
|
|
log.debug(query)
|
|
result = _run_query(query, db_name)
|
|
if result.rowcount > 0:
|
|
regions = result.fetchall()
|
|
return regions
|
|
|
|
|
|
def get_fms_db_resource_regions(resource_id, service):
|
|
regions = None
|
|
db_name, table_name, table_col, region_table_name = _get_db_info(service)
|
|
|
|
query = _build_get_resource_id_query(resource_id, table_col,
|
|
conf.flavor_table_name)
|
|
result = _run_query(query, db_name)
|
|
if not result.rowcount > 0:
|
|
raise Exception('resource {} not found'.format(resource_id))
|
|
resource_internal_id = result.first().__getitem__('internal_id')
|
|
log.debug("got resource internal id {}".format(resource_internal_id))
|
|
# from resource id get regions
|
|
query = _build_get_fms_regions_query(resource_internal_id,
|
|
region_table_name)
|
|
log.debug(query)
|
|
result = _run_query(query, db_name)
|
|
if result.rowcount > 0:
|
|
regions = result.fetchall()
|
|
return regions
|
|
|
|
|
|
def get_ims_db_resource_regions(resource_id, service):
|
|
regions = None
|
|
db_name, table_name, table_col, region_table_name = _get_db_info(service)
|
|
|
|
query = _build_get_resource_id_query(resource_id, table_col, table_name)
|
|
result = _run_query(query, db_name)
|
|
if not result.rowcount > 0:
|
|
raise Exception('resource {} not found'.format(resource_id))
|
|
resource_internal_id = result.first().__getitem__('id')
|
|
log.debug("got resource internal id {}".format(resource_internal_id))
|
|
# from resource id get regions
|
|
query = _build_get_ims_regions_query(resource_internal_id,
|
|
region_table_name)
|
|
|
|
log.debug(query)
|
|
result = _run_query(query, db_name)
|
|
if result.rowcount > 0:
|
|
regions = result.fetchall()
|
|
return regions
|
|
|
|
|
|
def get_rds_db_resource_status(resource_id):
|
|
return
|
|
|
|
|
|
def remove_resource_db(resource_id, service):
|
|
log.debug(
|
|
"cleaning {} db for resource {}".format(service, resource_id))
|
|
remove_resource_id(resource_id, service)
|
|
|
|
return
|