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
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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}))