Merge "Delete region logic and orm script changes"

This commit is contained in:
Zuul 2020-02-10 16:34:28 +00:00 committed by Gerrit Code Review
commit 7ca26d96a5
7 changed files with 48 additions and 94 deletions

View File

@ -57,7 +57,18 @@ def delete_customer_region(customer_id, region_id):
datamanager = CmsDataManager()
try:
customer_region = datamanager.get_record('customer_region')
customer_region.delete_region_for_customer(customer_id, region_id)
cust_regions = customer_region.get_regions_for_customer(customer_id)
for region in cust_regions:
# when "force_delete" option is used on delete customer region
# request, we don't need to execute the delete_region_for_customer
# function as it has already been previously handled by the
# force_delete option
if region.region.name == region_id:
customer_region.delete_region_for_customer(customer_id,
region_id)
break
datamanager.flush()
datamanager.commit()
except Exception as exp:
@ -91,7 +102,10 @@ def delete_flavor_region(flavor_uuid, region_name):
flavor_rec = datamanager.get_record('flavor')
sql_flavor = flavor_rec.get_flavor_by_id(flavor_uuid)
if sql_flavor is None:
# An empty 'flavor_regions' indicates that force_delete option was
# used on delete flavor region request. As the flavor is no longer
# associated with any region, we can skip the remove_region function.
if sql_flavor is None or not sql_flavor.flavor_regions:
return
sql_flavor.remove_region(region_name)
@ -112,7 +126,10 @@ def delete_image_region(image_uuid, region_name):
image_rec = datamanager.get_record('image')
sql_image = image_rec.get_image_by_id(image_uuid)
if sql_image is None:
# An empty sql_image.regions indicates that force_delete option was
# used on delete image region request. As the image is no longer
# associated with any region, we can skip the remove_region function.
if sql_image is None or not sql_image.regions:
return
sql_image.remove_region(region_name)

View File

@ -32,9 +32,14 @@ def add_update_template_data(data):
raise
def delete_resource_status_data(resource_id):
# delete all resource status entries for the given resource_id
pass
def delete_resource_status_data(resource_id, region):
# delete resource status entry for the given resource_id and region
logger.debug("delete resource status data for resource %s and "
"region %s" % (resource_id, region))
conn = factory.get_region_resource_id_status_connection()
resource_id, region = conn.get_resource_region_data(resource_id, region)
conn = factory.get_region_resource_id_status_connection()
conn.delete_resource_status_entry(resource_id, region)
def get_template_data(resource_id, region):
@ -102,15 +107,6 @@ def get_regions_by_status_resource_id(status, resource_id):
return result
def delete_resource_template_data(resource_id, region):
logger.debug("delete resource_template_data for resource %s and "
"region %s" % (resource_id, region))
conn = factory.get_region_resource_id_status_connection()
resource_id, region = conn.get_resource_region_data(resource_id, region)
conn = factory.get_resource_stack_data_connection()
conn.delete_resource_template(resource_id, region)
def validate_resource_type(resource_type):
allowed_resource_type = config['allowed_resource_type']
if resource_type not in allowed_resource_type:

View File

@ -1,18 +0,0 @@
""" SoT interface definition"""
class BaseSoT(object):
def save_resource_to_sot(self,
tracking_id,
transaction_id,
resource_list,
headers={}):
raise NotImplementedError("Please Implement this method")
def validate_sot_state(self):
raise NotImplementedError("Please Implement this method")
class SoTError(Exception):
pass

View File

@ -1,43 +0,0 @@
import yaml
def merge_yamls(document, section):
document_dict = yaml.safe_load(document)
section_dict = yaml.safe_load(section)
merge_dict(section_dict, document_dict)
new_document = yaml.dump(document_dict)
return new_document
# source is being merged into destiantion
def merge_dict(source, destination):
for key, value in list(source.items()):
if isinstance(value, dict):
# get node or create one
node = destination.setdefault(key, {})
merge_dict(value, node)
else:
destination[key] = value
return destination
document = """
a: 1
b:
c: 3
d: 4
f:
h: h1
"""
section = """
b:
d: 6
e: 5
f:
g: g1
h:
h1: h2
"""
print((merge_yamls(document, section)))

View File

@ -158,6 +158,23 @@ class ResStatusConnection(region_resource_id_status.ResourceStatusBase):
except oslo_db.exception.DBDuplicateEntry as e:
logger.warning("Duplicate entry: {}".format(str(e)))
def delete_resource_status_entry(self, resource_id, region_name):
# note that when a resource_status entry is deleted, its corresponding
# entry in resource_template_data is deleted as well
try:
session = self._engine_facade.get_session()
with session.begin():
record = session.query(ResourceStatusRecord).\
filter_by(resource_id=resource_id,
region=region_name).delete()
if record is None:
logger.exception(
'Resource status data not found with resource id {} '
'and region name {}'.format(resource_id, region_name))
except Exception as exp:
raise
def get_records_by_resource_id(self, resource_id):
return self.get_records_by_filter_args(resource_id=resource_id)
@ -323,21 +340,6 @@ class ResTemplateConnection(region_resource_id_status.ResourceTemplateBase):
except oslo_db.exception.DBDuplicateEntry as e:
logger.warning("Duplicate entry: {}".format(str(e)))
def delete_resource_template(self, resource_id, region_name):
try:
session = self._engine_facade.get_session()
with session.begin():
record = session.query(ResourceTemplateRecord).\
filter_by(resource_id=resource_id,
region=region_name).delete()
if record is None:
logger.exception(
'Template data not found with resource id {} and '
'region name {}'.format(resource_id, region_name))
except Exception as exp:
raise
def get_resource_template_data(self, resource_id, region):
logger.debug("Get resource template data by resource {} and "
"region '{}' ".format(resource_id, region))

View File

@ -36,7 +36,7 @@ def invoke_delete_region(data):
resource_type=data['resource_type'],
resource_id=data['resource_id'], region=data['region'])
# delete heat template entry
regionResourceIdStatus.delete_resource_template_data(
regionResourceIdStatus.delete_resource_status_data(
data['resource_id'], data['region'])
return

View File

@ -151,8 +151,8 @@ class CreateResource(unittest.TestCase):
'get_regions_by_status_resource_id', return_value=None)
@patch.object(ResourceService.uuid_utils, 'get_random_uuid',
return_value='uuid-gen-123456')
def test_create_flavor_sot_data_check(self, tranid, result,
yamlbuilder, database):
def test_create_flavor_data_check(self, tranid, result,
yamlbuilder, database):
"""check list creating."""
input_data = InputData(
transaction_id='497ab942-1ac0-11e6-82f3-005056a5129b',