Example #1
0
    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
Example #2
0
    def add_group(self, group_id, group_name, group_description,
                  region_ids_list):
        session = self._engine_facade.get_session()
        try:
            with session.begin():
                session.add(
                    Group(group_id=group_id,
                          name=group_name,
                          description=group_description))

                session.flush()  # add the groupe if not rollback

                if region_ids_list is not None:
                    group_regions = []
                    for region_id in region_ids_list:
                        group_regions.append(
                            GroupRegion(group_id=group_id,
                                        region_id=region_id))
                    session.add_all(group_regions)
        except oslo_db.exception.DBReferenceError as e:
            logger.error("Reference error: {}".format(str(e)))
            raise error_base.InputValueError("Reference error")
        except oslo_db.exception.DBDuplicateEntry as e:
            logger.error("Duplicate entry: {}".format(str(e)))
            raise error_base.ConflictError("Duplicate entry error")
Example #3
0
 def _validate_end_points(self, endpoints_types_must_have):
     ep_duplicate = []
     for endpoint in self.endpoints:
         if endpoint.type not in ep_duplicate:
             ep_duplicate.append(endpoint.type)
         else:
             raise error_base.InputValueError(
                 message="Invalid endpoints. Duplicate endpoint "
                 "type {}".format(endpoint.type))
         try:
             endpoints_types_must_have.remove(endpoint.type)
         except Exception:
             pass
     if len(endpoints_types_must_have) > 0:
         raise error_base.InputValueError(
             message="Invalid endpoints. Endpoint type '{}' "
             "is missing".format(endpoints_types_must_have))
Example #4
0
    def put(self, region_id, new_status):
        """Handle put request to modify region status
        :param region_id:
        :param new_status:
        :return: 200 for updated, 404 for region not found
        400 invalid status
        """
        logger.info("Entered update region status")
        logger.debug("Got status: {}".format(new_status.status))

        authentication.authorize(request, 'status:put')

        try:
            allowed_status = conf.region_options.allowed_status_values[:]

            if new_status.status not in allowed_status:
                logger.error("Invalid status. Region status "
                             "must be one of {}".format(allowed_status))
                raise error_base.InputValueError(
                    message="Invalid status. Region status "
                    "must be one of {}".format(allowed_status))

            # May raise an exception which will return status code 400
            status = RegionService.update_region_status(
                region_id, new_status.status)
            base_link = 'https://{0}:{1}{2}'.format(conf.server.host,
                                                    conf.server.port,
                                                    pecan.request.path)
            link = {'self': base_link}

            logger.debug("Region status for region id {}, was successfully "
                         "changed to: {}.".format(region_id,
                                                  new_status.status))

            event_details = 'Region {} status updated to {}'.format(
                region_id, new_status.status)
            utils.audit_trail('Update status',
                              request.transaction_id,
                              request.headers,
                              region_id,
                              event_details=event_details)

            return RegionStatus(status, link)

        except error_base.ErrorStatus as e:
            logger.error(e.message)
            raise err_utils.get_error(request.transaction_id,
                                      message=e.message,
                                      status_code=e.status_code)
        except Exception as exception:
            logger.error(exception.message)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=exception.message)
Example #5
0
 def _validate_status(self, allowed_status):
     if self.status not in allowed_status:
         raise error_base.InputValueError(
             message="Invalid status. Region status must be "
             "one of {}".format(allowed_status))
     return