def update_resource_refs(self, resource_type, m_r): # Update any references in m_r to other resources in the master cloud # to use the equivalent subcloud resource instead. m_r = m_r.copy() if resource_type == consts.RESOURCE_TYPE_NETWORK_SECURITY_GROUP_RULE: if m_r.get('security_group_id') is not None: # If the security group id is in the dict then it is for the # master region, and we need to update it with the equivalent # id from the subcloud. master_sec_group_id = m_r['security_group_id'] sec_group_rsrc = resource.Resource.get_by_type_and_master_id( self.ctxt, consts.RESOURCE_TYPE_NETWORK_SECURITY_GROUP, master_sec_group_id) sec_group_subcloud_rsrc = self.get_db_subcloud_resource( sec_group_rsrc.id) if sec_group_subcloud_rsrc: m_r['security_group_id'] = \ sec_group_subcloud_rsrc.subcloud_resource_id else: LOG.error( "Unable to update security group id in {}," "cannot find equivalent security group in subcloud.". format(m_r), extra=self.log_extra) raise exceptions.SubcloudResourceNotFound( resource=sec_group_rsrc.id) if m_r.get('remote_group_id') is not None: # If the remote group id is in the dict then it is for the # master region, and we need to update it with the equivalent # id from the subcloud. master_remote_group_id = m_r['remote_group_id'] remote_group_rsrc = \ resource.Resource.get_by_type_and_master_id( self.ctxt, consts.RESOURCE_TYPE_NETWORK_SECURITY_GROUP, master_remote_group_id) remote_group_subcloud_rsrc = self.get_db_subcloud_resource( remote_group_rsrc.id) if remote_group_subcloud_rsrc: m_r['remote_group_id'] = \ remote_group_subcloud_rsrc.subcloud_resource_id else: LOG.error( "Unable to update remote group id in {}," "cannot find equivalent remote group in subcloud.". format(m_r), extra=self.log_extra) raise exceptions.SubcloudResourceNotFound( resource=sec_group_rsrc.id) return m_r
def _subcloud_resource_get(context, subcloud_resource_id, session=None): query = model_query(context, models.SubcloudResource, session=session). \ filter_by(deleted=0) query = add_identity_filter(query, subcloud_resource_id) try: return query.one() except NoResultFound: raise exception.SubcloudResourceNotFound(resource=subcloud_resource_id)
def subcloud_resource_delete(context, subcloud_resource_id): with write_session() as session: query = session.query(models.SubcloudResource). \ filter_by(deleted=0) query = add_identity_filter(query, subcloud_resource_id) try: subcloud_resource_ref = query.one() except NoResultFound: raise exception.SubcloudResourceNotFound( resource=subcloud_resource_id) session.delete(subcloud_resource_ref)
def subcloud_resource_get_by_resource_and_subcloud( context, resource_id, subcloud_id): query = model_query(context, models.SubcloudResource). \ filter_by(deleted=0). \ filter_by(resource_id=resource_id). \ filter_by(subcloud_id=subcloud_id) try: return query.one() except NoResultFound: raise exception.SubcloudResourceNotFound() except MultipleResultsFound: raise exception.InvalidParameterValue( err=("Multiple entries found for resource %(rid)d " "subcloud %(sid)d", {'rid': resource_id, 'sid': subcloud_id}))