コード例 #1
0
ファイル: data_manager.py プロジェクト: RaigaX9/ranger
    def update_region_meta_data(self, region_id, metadata_dict):
        """Replace existing metadata for given region_id
        :param region_id:
        :param metadata_dict:
        :return:
        """
        session = self._engine_facade.get_session()
        with session.begin():

            record = session.query(Region). \
                filter_by(region_id=region_id).first()
            if not record:
                msg = "Region {} not found".format(region_id)
                logger.info(msg)
                raise error_base.NotFoundError(message=msg)

            session.query(RegionMetaData).\
                filter_by(region_id=region_id).delete()

            region_metadata = []
            for k, v in metadata_dict.iteritems():
                for list_item in v:
                    region_metadata.append(
                        RegionMetaData(region_id=region_id,
                                       meta_data_key=k,
                                       meta_data_value=list_item))

            session.add_all(region_metadata)
            return record.to_wsme()
コード例 #2
0
ファイル: data_manager.py プロジェクト: RaigaX9/ranger
    def update_group(self, group_id, group_name, group_description,
                     group_regions):
        try:
            session = self._engine_facade.get_session()
            with session.begin():
                # in update scenario delete all child records
                session.query(GroupRegion).filter_by(
                    group_id=group_id).delete()

                group_record = session.query(Group).filter_by(
                    group_id=group_id).first()
                if group_record is None:
                    raise error_base.NotFoundError(
                        message="Group {} not found".format(group_id))
                # only desc and regions can be changed
                group_record.description = group_description
                group_record.name = group_name
                regions = []
                for region_id in group_regions:
                    regions.append(
                        GroupRegion(region_id=region_id, group_id=group_id))
                session.add_all(regions)

        except error_base.NotFoundError as exp:
            logger.error(exp.message)
            raise
        except oslo_db.exception.DBReferenceError as e:
            logger.error("Reference error: {}".format(str(e)))
            raise error_base.InputValueError("Reference error")
        except Exception as exp:
            logger.error("failed to update group {}".format(group_id))
            logger.exception(exp)
            raise
        return
コード例 #3
0
ファイル: data_manager.py プロジェクト: RaigaX9/ranger
    def delete_region_metadata(self, region_id, key):
        session = self._engine_facade.get_session()
        with session.begin():
            record = session.query(Region). \
                filter_by(region_id=region_id).first()

            if not record:
                msg = "Region {} not found".format(region_id)
                logger.info(msg)
                raise error_base.NotFoundError(message=msg)

            session.query(RegionMetaData).filter_by(
                region_id=region_id, meta_data_key=key).delete()
コード例 #4
0
ファイル: services.py プロジェクト: RaigaX9/ranger
def get_groups_data(name):
    """get group from db.

    :param name: groupe name
    :return: groupe object with its regions
    :raise: NoContentError( status code 404)
    """
    db = data_manager_factory.get_data_manager()
    groups = db.get_group(name)
    if not groups:
        raise error_base.NotFoundError(
            message="Group {} not found".format(name))
    return Groups(**groups)
コード例 #5
0
ファイル: services.py プロジェクト: RaigaX9/ranger
def get_regions_data(url_parms):
    """get region from db.

    :param url_parms: the parameters got in the url to make the query
    :return: region model for json output
    :raise: NoContentError( status code 404)
    """
    region_dict, metadata_dict, end_point = url_parms._build_query()
    db = data_manager_factory.get_data_manager()
    regions = db.get_regions(region_dict, metadata_dict, end_point)
    if not regions:
        raise error_base.NotFoundError(
            message="No regions found for the given search parameters")
    return Regions(regions)
コード例 #6
0
ファイル: services.py プロジェクト: RaigaX9/ranger
def update_region_metadata(region_id, metadata_dict):
    LOG.debug("Update metadata to region id : {}. "
              "New metadata: {}".format(region_id, metadata_dict))
    try:
        db = data_manager_factory.get_data_manager()
        result = db.update_region_meta_data(region_id, metadata_dict)
        if not result:
            raise error_base.NotFoundError(message="Region {} not "
                                           "found".format(region_id))
        else:
            return result.metadata

    except Exception as exp:
        LOG.exception(
            "Error getting metadata for region id:".format(region_id))
        raise
コード例 #7
0
ファイル: services.py プロジェクト: RaigaX9/ranger
def add_region_metadata(region_id, metadata_dict):
    LOG.debug("Add metadata: {} to region id : {}".format(
        metadata_dict, region_id))
    try:
        db = data_manager_factory.get_data_manager()
        result = db.add_meta_data_to_region(region_id, metadata_dict)
        if not result:
            raise error_base.NotFoundError(
                message="Region {} not found".format(region_id))
        else:
            return result.metadata

    except Exception as exp:
        LOG.exception(
            "Error getting metadata for region id:".format(region_id))
        raise
コード例 #8
0
ファイル: data_manager.py プロジェクト: RaigaX9/ranger
    def update_region_status(self, region_id, region_status):
        try:
            session = self._engine_facade.get_session()
            with session.begin():

                record = session.query(Region).filter_by(
                    region_id=region_id).first()
                if record is not None:
                    record.region_status = region_status
                else:
                    msg = "Region {} not found".format(region_id)
                    logger.info(msg)
                    raise error_base.NotFoundError(message=msg)
                return record.region_status

        except Exception as exp:
            logger.exception("failed to update region {}".format(str(exp)))
            raise
コード例 #9
0
ファイル: services.py プロジェクト: RaigaX9/ranger
def create_group_in_db(group_id, group_name, description, regions):
    """Create a region group in the database.

    :param group_id: The ID of the group to create
    :param group_name: The name of the group to create
    :param description: The group description
    :param regions: A list of regions inside the group
    :raise: GroupExistsError (status code 400) if the group already exists
    """
    try:
        manager = data_manager_factory.get_data_manager()
        manager.add_group(group_id, group_name, description, regions)
    except error_base.ConflictError:
        LOG.exception("Group {} already exists".format(group_id))
        raise error_base.ConflictError(
            message="Group {} already exists".format(group_id))
    except error_base.InputValueError:
        LOG.exception("Some of the regions not found")
        raise error_base.NotFoundError(message="Some of the regions not found")
コード例 #10
0
ファイル: services.py プロジェクト: RaigaX9/ranger
def get_region_by_id_or_name(region_id_or_name):
    """get region by id

    :param region_id_or_name:
    :return: region object (wsme format)
    """
    LOG.debug(
        "LOGIC:- get region data by id or name {}".format(region_id_or_name))
    try:
        db = data_manager_factory.get_data_manager()
        region = db.get_region_by_id_or_name(region_id_or_name)

        if not region:
            raise error_base.NotFoundError(
                message="Region {} not found".format(region_id_or_name))

    except Exception as exp:
        LOG.exception("error in get region by id/name")
        raise

    return region
コード例 #11
0
ファイル: services.py プロジェクト: RaigaX9/ranger
def update_group(group, group_id):
    result = None
    LOG.debug("update group logic")
    try:
        group = group._to_python_obj()
        db_manager = data_manager_factory.get_data_manager()
        LOG.debug("update group to {}".format(group._to_db_model_dict()))
        db_manager.update_group(group_id=group_id, **group._to_db_model_dict())
        LOG.debug("group updated")
        # make sure it updated
        groups = db_manager.get_group(group_id)

    except error_base.NotFoundError:
        LOG.error("Group {} not found")
        raise
    except error_base.InputValueError:
        LOG.exception("Some of the regions not found")
        raise error_base.NotFoundError(message="Some of the regions not found")
    except Exception as exp:
        LOG.error("Failed to update group {}".format(group.group_id))
        LOG.exception(exp)
        raise

    return Groups(**groups)
コード例 #12
0
ファイル: data_manager.py プロジェクト: RaigaX9/ranger
    def update_region(
            self,
            region_to_update,
            region_id,
            name,
            address_state,
            address_country,
            address_city,
            address_street,
            address_zip,
            region_status,
            ranger_agent_version,
            open_stack_version,
            design_type,
            location_type,
            vlcp_name,
            clli,
            # a list of dictionaries of format
            # {"type":"", "url":"", "description":""
            end_point_list,
            # a list of dictionaries of format
            # {"key":"", "value":"", "description":""
            meta_data_dict,
            description=""):
        """ add a new region to the `region` table
        add also the regions give meta_data and end_points to the `region_end_point` and
        `region_meta_data` tables if given.
        handle duplicate errors if raised
        """
        try:
            session = self._engine_facade.get_session()
            with session.begin():
                # remove all childs as with update need to replace them
                session.query(RegionMetaData).filter_by(
                    region_id=region_to_update).delete()
                session.query(RegionEndPoint).filter_by(
                    region_id=region_to_update).delete()

                record = session.query(Region).filter_by(
                    region_id=region_to_update).first()
                if record is not None:
                    #   record.region_id = region_id  # ignore id and name when update
                    #   record.name = name
                    record.address_state = address_state
                    record.address_country = address_country
                    record.address_city = address_city
                    record.address_street = address_street
                    record.address_zip = address_zip
                    record.region_status = region_status
                    record.ranger_agent_version = ranger_agent_version
                    record.open_stack_version = open_stack_version
                    record.design_type = design_type
                    record.location_type = location_type
                    record.vlcp_name = vlcp_name
                    record.clli = clli
                    record.description = description

                    if end_point_list is not None:
                        for end_point in end_point_list:
                            region_end_point = RegionEndPoint(
                                end_point_type=end_point["type"],
                                public_url=end_point["url"])
                            record.end_points.append(region_end_point)

                    if meta_data_dict is not None:
                        for k, v in meta_data_dict.iteritems():
                            for list_item in v:
                                record.meta_data.append(
                                    RegionMetaData(region_id=region_id,
                                                   meta_data_key=k,
                                                   meta_data_value=list_item))
                else:
                    raise EntityNotFound(
                        "Region {} not found".format(region_to_update))
        except EntityNotFound as exp:
            logger.exception(
                "fail to update entity with id {} not found".format(
                    region_to_update))
            raise error_base.NotFoundError(message=exp.message)
        except Exception as exp:
            logger.exception("fail to update region {}".format(str(exp)))
            raise