def _update(self, resourcePool: ocloud.ResourcePool):
self.session.add(resourcePool)
+ def _delete(self, resource_pool_id):
+ self.session.query(ocloud.ResourcePool).filter_by(
+ resourcePoolId=resource_pool_id).delete()
+
class ResourceSqlAlchemyRepository(ResourceRepository):
def __init__(self, session):
def _update(self, resource: ocloud.Resource):
self.session.add(resource)
+ def _delete(self, resource_id):
+ self.session.query(ocloud.Resource).filter_by(
+ resourceId=resource_id).delete()
+
class DeploymentManagerSqlAlchemyRepository(DeploymentManagerRepository):
def __init__(self, session):
def _update(self, deployment_manager: ocloud.DeploymentManager):
self.session.add(deployment_manager)
+ def _delete(self, deployment_manager_id):
+ self.session.query(ocloud.DeploymentManager).filter_by(
+ deploymentManagerId=deployment_manager_id).delete()
+
class SubscriptionSqlAlchemyRepository(SubscriptionRepository):
def __init__(self, session):
self._update(resource_pool)
self.seen.add(resource_pool)
+ def delete(self, resource_pool_id):
+ self._delete(resource_pool_id)
+
@abc.abstractmethod
def _add(self, resource_pool: ocloud.ResourcePool):
raise NotImplementedError
def _update(self, resource_pool: ocloud.ResourcePool):
raise NotImplementedError
+ @abc.abstractmethod
+ def _delete(self, resource_pool_id):
+ raise NotImplementedError
+
class ResourceRepository(abc.ABC):
def __init__(self):
self._update(resource)
self.seen.add(resource)
+ def delete(self, resource_id):
+ self._delete(resource_id)
+
@abc.abstractmethod
def _add(self, resource: ocloud.Resource):
raise NotImplementedError
def _update(self, resource: ocloud.Resource):
raise NotImplementedError
+ @abc.abstractmethod
+ def _delete(self, resource_id):
+ raise NotImplementedError
+
class DeploymentManagerRepository(abc.ABC):
def __init__(self):
def update(self, deployment_manager: ocloud.DeploymentManager):
self._update(deployment_manager)
+ def delete(self, deployment_manager_id):
+ self._delete(deployment_manager_id)
+
@abc.abstractmethod
def _add(self, deployment_manager: ocloud.DeploymentManager):
raise NotImplementedError
@abc.abstractmethod
def _update(self, deployment_manager: ocloud.DeploymentManager):
raise NotImplementedError
+
+ @abc.abstractmethod
+ def _delete(self, deployment_manager_id):
+ raise NotImplementedError
exist in the authoritative source."""
try:
with self._bus.uow as uow:
- # 1. Get current DMS IDs from authoritative source (client)
+ # 1. Get current DMS IDs from client
current_dms = self._client.list(ocloudid=ocloudid)
current_ids = set([d.id for d in current_dms])
# 2. Get all DMS IDs from DB
if hasattr(uow, 'deployment_managers'):
- db_dms = list(uow.deployment_managers.list().all())
-
+ # The list() method returns a SQLAlchemy query object
+ db_dms = uow.deployment_managers.list().all()
db_ids = set(d.deploymentManagerId for d in db_dms)
deleted_ids = db_ids - current_ids
-
# TODO: When an dms is deleted, the SMO must be notified.
for del_id in deleted_ids:
return "resourcepool"
def _prune_stale_resourcepools_and_resources(self, ocloudid):
- """Prune resource pools (subclouds) and their related resources from DB
- if they no longer exist in the authoritative source."""
+ """Prune resource pools (subclouds) and their related resources from
+ DB if they no longer exist in the authoritative source."""
try:
with self._bus.uow as uow:
# 1. Get current resource pool IDs from the client
current_ids = set(r.id for r in current_resourcepools)
# 2. Get all resource pool IDs from DB
- db_resourcepools = uow.resource_pools.list()
+ db_resourcepools_query = uow.resource_pools.list()
+ db_resourcepools = db_resourcepools_query.all()
+
db_ids = set(r.resourcePoolId for r in db_resourcepools)
# 3. Delete any in DB not in current
# TODO: When an resource, resource pool is deleted,
# the SMO must be notified.
-
for del_id in deleted_ids:
# Delete all related resources first
if hasattr(uow, 'resources'):
- db_resources = uow.resources.list(del_id)
- db_resources = db_resources.all()
+ db_resources = uow.resources.list(del_id).all()
+
for res in db_resources:
+ # First, delete all alarm event records that
+ # reference this resource
+ if hasattr(uow, 'alarm_event_records'):
+ alarm_rec = (
+ uow.alarm_event_records.list().all()
+ )
+
+ # Find and delete alarm records that reference
+ # this resource
+ for alarm_rec in alarm_rec:
+ if alarm_rec.resourceId == res.resourceId:
+ logger.info(
+ f'Deleting alarm record \
+ {alarm_rec.alarmEventRecordId} \
+ that references \
+ resource {res.resourceId}'
+ )
+ uow.alarm_event_records.delete(
+ alarm_rec
+ )
+
+ # Now delete the resource
+ logger.info(f'Deleting resource {res.resourceId}')
uow.resources.delete(res.resourceId)
+
+ # Finally delete the resource pool
uow.resource_pools.delete(del_id)
if deleted_ids:
- logger.info(f'Pruned resource pools and \
- resources: {deleted_ids}')
+ logger.info(f'Pruned resource pools and related resources\
+ :{deleted_ids}')
uow.commit()
except Exception as e:
- logger.error(f'Error pruning stale resource pools/resources: \
- {str(e)}')
+ logger.error(f'Error pruning stale resource \
+ pools/resources:{str(e)}')
def _probe(self, parent: StxGenericModel, tags: object = None):
ocloudid = parent.id