コード例 #1
0
ファイル: metadata.py プロジェクト: RaigaX9/ranger
    def put(self, region_id, metadata_input):
        """Handle put request.
        :param region_id: region_id to update metadata to.
        :param metadata_input: json data
        :return: 201 created on success, 404 not found
        """
        logger.info("Entered update region metadata")
        logger.debug("Got metadata: {}".format(metadata_input))
        authentication.authorize(request, 'metadata:update')

        try:
            self._validate_request_input()
            # May raise an exception which will return status code 400
            result = RegionService.update_region_metadata(region_id,
                                                          metadata_input.metadata)
            logger.debug("Metadata was successfully added to "
                         "region: {}. New metadata: {}".format(region_id, result))

            event_details = 'Region {} metadata updated'.format(region_id)
            utils.audit_trail('update metadata', request.transaction_id,
                              request.headers, region_id,
                              event_details=event_details)
            return MetaData(result)

        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)
コード例 #2
0
ファイル: metadata.py プロジェクト: RaigaX9/ranger
    def put(self, customer_uuid, metadata):
        authentication.authorize(request, 'customers:update_metadata')
        try:
            res = logic.update_customer_metadata(customer_uuid, metadata, request.transaction_id)

            event_details = 'Customer {} metadata updated'.format(customer_uuid)
            utils.audit_trail('update customer metadata',
                              request.transaction_id, request.headers,
                              customer_uuid, event_details=event_details)
            return res
        except AttributeError as ex:
            raise err_utils.get_error(request.transaction_id,
                                      message=ex.message, status_code=400)
        except ValueError as ex:
            raise err_utils.get_error(request.transaction_id,
                                      message=ex.message, status_code=404)
        except ErrorStatus as ex:
            LOG.log_exception("MetaDataController - Failed to add metadata", ex)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=ex.status_code)
        except LookupError as ex:
            LOG.log_exception("MetaDataController - {0}".format(ex.message), ex)
            raise err_utils.get_error(request.transaction_id,
                                      message=ex.message, status_code=400)
        except Exception as ex:
            LOG.log_exception("MetaDataController - Failed to add metadata", ex)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500, error_details=str(ex))
コード例 #3
0
ファイル: regions.py プロジェクト: RaigaX9/ranger
    def delete(self, customer_id, region_id):
        LOG.info("RegionController - Delete Region (delete) customer id {0} region_id: {1}".format(customer_id, region_id))
        authentication.authorize(request, 'customers:delete_region')
        try:
            customer_logic = CustomerLogic()
            customer_logic.delete_region(customer_id, region_id, request.transaction_id)
            LOG.info("RegionController - Delete Region (delete) finished well")

            event_details = 'Customer {} region: {} deleted'.format(
                customer_id, region_id)
            utils.audit_trail('delete region', request.transaction_id,
                              request.headers, customer_id,
                              event_details=event_details)

        except ValueError as exception:
            raise err_utils.get_error(request.transaction_id,
                                      message=exception.message,
                                      status_code=404)
        except ErrorStatus as exception:
            LOG.log_exception("CustomerController - Failed to delete region", exception)
            raise err_utils.get_error(request.transaction_id,
                                      message=exception.message,
                                      status_code=exception.status_code)

        except Exception as exception:
            LOG.log_exception("RegionController - Failed in delete Region", exception)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=str(exception))
コード例 #4
0
ファイル: metadata.py プロジェクト: RaigaX9/ranger
    def delete(self, region_id, metadata_key):
        """Handle delete request.
        :param region_id: region_id to update metadata to.
        :param metadata_key: metadata key to be deleted
        :return: 204 deleted
        """
        logger.info("Entered delete region metadata with "
                    "key: {}".format(metadata_key))
        authentication.authorize(request, 'metadata:delete')

        try:
            # May raise an exception which will return status code 400
            result = RegionService.delete_metadata_from_region(region_id,
                                                               metadata_key)
            logger.debug("Metadata was successfully deleted.")

            event_details = 'Region {} metadata {} deleted'.format(
                region_id, metadata_key)
            utils.audit_trail('delete metadata', request.transaction_id,
                              request.headers, region_id,
                              event_details=event_details)

        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)
コード例 #5
0
ファイル: regions.py プロジェクト: RaigaX9/ranger
    def put(self, customer_id, regions):
        LOG.info("RegionController - Replace Regions (put) customer id {0} regions: {1}".format(customer_id, str(regions)))
        authentication.authorize(request, 'customers:update_region')
        self.validate_put_url()
        try:
            customer_logic = CustomerLogic()
            result = customer_logic.replace_regions(customer_id, regions, request.transaction_id)
            LOG.info("RegionController - Replace Regions (put) finished well: " + str(result))

            event_details = 'Customer {} regions: {} updated'.format(
                customer_id, [r.name for r in regions])
            utils.audit_trail('Replace regions', request.transaction_id,
                              request.headers, customer_id,
                              event_details=event_details)

        except ErrorStatus as exception:
            LOG.log_exception("CustomerController - Failed to Replace regions", exception)
            raise err_utils.get_error(request.transaction_id,
                                      message=exception.message,
                                      status_code=exception.status_code)

        except Exception as exception:
            LOG.log_exception("RegionController - Replace Regions (put) - Failed to replace regions", exception)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=str(exception))

        return result
コード例 #6
0
ファイル: root.py プロジェクト: RaigaX9/ranger
    def delete(self, customer_id):
        authentication.authorize(request, 'customers:delete')
        customer_logic = CustomerLogic()

        try:
            LOG.info("CustomerController - DeleteCustomer: uuid is " +
                     customer_id)
            customer_logic.delete_customer_by_uuid(customer_id)
            LOG.info("CustomerController - DeleteCustomer finished well")

            event_details = 'Customer {} deleted'.format(customer_id)
            utils.audit_trail('delete customer',
                              request.transaction_id,
                              request.headers,
                              customer_id,
                              event_details=event_details)

        except ErrorStatus as exception:
            LOG.log_exception("CustomerController - Failed to DeleteCustomer",
                              exception)
            raise err_utils.get_error(request.transaction_id,
                                      message=exception.message,
                                      status_code=exception.status_code)

        except Exception as exception:
            LOG.log_exception("CustomerController - Failed to DeleteCustomer",
                              exception)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=exception.message)
コード例 #7
0
ファイル: root.py プロジェクト: RaigaX9/ranger
    def put(self, customer_id, customer):
        LOG.info("CustomerController - UpdateCustomer: " + str(customer))
        authentication.authorize(request, 'customers:update')
        try:
            customer_logic = CustomerLogic()
            result = customer_logic.update_customer(customer, customer_id,
                                                    request.transaction_id)
            response.status = 200
            LOG.info("CustomerController - UpdateCustomer finished well: " +
                     str(customer))

            event_details = 'Customer {} {} updated in regions: {}, with users: {}'.format(
                customer_id, customer.name, [r.name for r in customer.regions],
                [u.id for u in customer.users])
            utils.audit_trail('update customer',
                              request.transaction_id,
                              request.headers,
                              customer_id,
                              event_details=event_details)

        except ErrorStatus as exception:
            LOG.log_exception("Failed in UpdateCustomer", exception)
            raise err_utils.get_error(request.transaction_id,
                                      message=exception.message,
                                      status_code=exception.status_code)

        except Exception as exception:
            LOG.log_exception("CustomerController - Failed to UpdateCustomer",
                              exception)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=exception.message)

        return result
コード例 #8
0
ファイル: regions.py プロジェクト: RaigaX9/ranger
    def post(self, customer_id, regions):
        LOG.info("RegionController - Add Regions (post) customer id {0} regions: {1}".format(customer_id, str(regions)))
        authentication.authorize(request, 'customers:add_region')
        try:
            customer_logic = CustomerLogic()
            result = customer_logic.add_regions(customer_id, regions, request.transaction_id)
            LOG.info("RegionController - Add Regions (post) finished well: " + str(result))

            event_details = 'Customer {} regions: {} added'.format(
                customer_id, [r.name for r in regions])
            utils.audit_trail('add regions', request.transaction_id,
                              request.headers, customer_id,
                              event_details=event_details)

        except DBDuplicateEntry as exception:
            LOG.log_exception("RegionController - Add Regions (post) - region already exists", exception)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=409,
                                      message='Region already exists',
                                      error_details=exception.message)

        except ErrorStatus as exception:
            LOG.log_exception("CustomerController - Failed to update regions", exception)
            raise err_utils.get_error(request.transaction_id,
                                      message=exception.message,
                                      status_code=exception.status_code)

        except Exception as exception:
            LOG.log_exception("RegionController - Add Regions (post) - Failed to update regions", exception)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=str(exception))

        return result
コード例 #9
0
ファイル: status.py プロジェクト: RaigaX9/ranger
    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)
コード例 #10
0
ファイル: root.py プロジェクト: RaigaX9/ranger
    def post(self, customer):
        LOG.info("CustomerController - CreateCustomer: " + str(customer))
        authentication.authorize(request, 'customers:create')
        try:
            uuid = None
            if not customer.custId:
                uuid = utils.make_uuid()
            else:
                if not CustomerController.validate_cust_id(customer.custId):
                    utils.audit_trail('create customer',
                                      request.transaction_id, request.headers,
                                      customer.custId)
                    raise ErrorStatus('400', None)
                try:
                    uuid = utils.create_existing_uuid(customer.custId)
                except TypeError:
                    raise ErrorStatus(
                        409.1, 'Customer ID {0} already exists'.format(
                            customer.custId))

            customer_logic = CustomerLogic()
            try:
                result = customer_logic.create_customer(
                    customer, uuid, request.transaction_id)
            except oslo_db.exception.DBDuplicateEntry as exception:
                raise ErrorStatus(
                    409.2, 'Customer field {0} already exists'.format(
                        exception.columns))

            LOG.info("CustomerController - Customer Created: " + str(result))
            event_details = 'Customer {} {} created in regions: {}, with users: {}'.format(
                uuid, customer.name, [r.name for r in customer.regions],
                [u.id for u in customer.users])
            utils.audit_trail('create customer',
                              request.transaction_id,
                              request.headers,
                              uuid,
                              event_details=event_details)
            return result

        except ErrorStatus as exception:
            LOG.log_exception("CustomerController - Failed to CreateCustomer",
                              exception)
            raise err_utils.get_error(request.transaction_id,
                                      message=exception.message,
                                      status_code=exception.status_code)

        except Exception as exception:
            LOG.log_exception("CustomerController - Failed to CreateCustomer",
                              exception)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=exception.message)
コード例 #11
0
    def post(self, group_input):
        """Handle post request.

        :param group_input: json data
        :return: 201 created on success, 409 otherwise.
        """
        logger.info("Entered Create Group")
        logger.debug(
            "id = {}, name = {}, description = {}, regions = {}".format(
                group_input.id, group_input.name, group_input.description,
                group_input.regions))
        authentication.authorize(request, 'group:create')

        try:
            # May raise an exception which will return status code 400
            GroupService.create_group_in_db(group_input.id, group_input.name,
                                            group_input.description,
                                            group_input.regions)
            logger.debug("Group created successfully in DB")

            # Create the group output data with the correct timestamp and link
            group = OutputResource(
                group_input.id, group_input.name,
                repr(int(time.time() * 1000)), {
                    'self':
                    '{}/v2/orm/groups/{}'.format(request.application_url,
                                                 group_input.id)
                })

            event_details = 'Region group {} {} created with regions: {}'.format(
                group_input.id, group_input.name, group_input.regions)
            utils.audit_trail('create group',
                              request.transaction_id,
                              request.headers,
                              group_input.id,
                              event_details=event_details)
            return Result(group)

        except error_base.ErrorStatus as e:
            logger.error("GroupsController - {}".format(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)
コード例 #12
0
 def test_audit_service_with_tracking(self, mock_audit, mock_init):
     utils.audit_trail('create customer',
                       '1234', {
                           'X-RANGER-Client': 'Fred',
                           'X-RANGER-Tracking-Id': 'Track12'
                       },
                       '5678',
                       event_details='CMS')
     self.assertEqual(mock_audit.call_args[0][1], 'Fred')  # application_id
     self.assertEqual(mock_audit.call_args[0][2], 'Track12')  # tracking_id
     self.assertEqual(mock_audit.call_args[0][3], '1234')  # transaction_id
     self.assertEqual(mock_audit.call_args[0][4],
                      'create customer')  # transaction_type
     self.assertEqual(mock_audit.call_args[0][5], '5678')  # resource_id
     # self.assertEqual(mock_audit.call_args[0][6], 'cms')  # service
     self.assertEqual(mock_audit.call_args[0][7], '')  # user_id
     self.assertEqual(mock_audit.call_args[0][8], 'NA')  # external_id
     self.assertEqual(mock_audit.call_args[0][9], 'CMS')  # event_details
コード例 #13
0
ファイル: regions.py プロジェクト: RaigaX9/ranger
    def put(self, region_id, region):
        logger.info("API: update region")
        authentication.authorize(request, 'region:update')

        try:

            logger.debug("region to update {} with{}".format(
                region_id, region))
            result = RegionService.update_region(region_id, region)
            logger.debug("API: region {} updated".format(region_id))

            event_details = 'Region {} {} modified: AICversion {}, OSversion {}, CLLI {}'.format(
                region.name, region.design_type, region.ranger_agent_version,
                region.open_stack_version, region.clli)
            utils.audit_trail('update region',
                              request.transaction_id,
                              request.headers,
                              region_id,
                              event_details=event_details)

        except error_base.NotFoundError as exp:
            logger.exception("region {} not found".format(region_id))
            raise err_utils.get_error(request.transaction_id,
                                      status_code=exp.status_code,
                                      message=exp.message)

        except error_base.InputValueError as exp:
            logger.exception("not valid input {}".format(exp.message))
            raise err_utils.get_error(request.transaction_id,
                                      status_code=exp.status_code,
                                      message=exp.message)
        except Exception as exp:
            logger.exception(
                "API: error in updating region {}.. reason:- {}".format(
                    region_id, exp))
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      message=exp.message)
        return result
コード例 #14
0
ファイル: regions.py プロジェクト: RaigaX9/ranger
    def post(self, full_region_input):
        logger.info("API: CreateRegion")
        authentication.authorize(request, 'region:create')

        try:
            logger.debug(
                "API: create region .. data = : {}".format(full_region_input))
            result = RegionService.create_full_region(full_region_input)
            logger.debug("API: region created : {}".format(result))

            event_details = 'Region {} {} created: AICversion {}, OSversion {}, CLLI {}'.format(
                full_region_input.name, full_region_input.design_type,
                full_region_input.ranger_agent_version,
                full_region_input.open_stack_version, full_region_input.clli)
            utils.audit_trail('create region',
                              request.transaction_id,
                              request.headers,
                              full_region_input.id,
                              event_details=event_details)
        except error_base.InputValueError as exp:
            logger.exception("Error in save region {}".format(exp.message))
            raise err_utils.get_error(request.transaction_id,
                                      status_code=exp.status_code,
                                      message=exp.message)

        except error_base.ConflictError as exp:
            logger.exception("Conflict error {}".format(exp.message))
            raise err_utils.get_error(request.transaction_id,
                                      message=exp.message,
                                      status_code=exp.status_code)

        except Exception as exp:
            logger.exception(
                "Error in creating region .. reason:- {}".format(exp))
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      message=exp.message)

        return result
コード例 #15
0
ファイル: enabled.py プロジェクト: RaigaX9/ranger
    def put(self, customer_uuid, enable):
        authentication.authorize(request, 'customers:enable')
        try:
            LOG.info(
                "EnabledController - (put) customer id {0} enable: {1}".format(
                    customer_uuid, enable))
            customer_logic = CustomerLogic()
            result = customer_logic.enable(customer_uuid, enable,
                                           request.transaction_id)
            LOG.info(
                "EnabledController - change enable (put) finished well: " +
                str(result))

            event_details = 'Customer {} {}'.format(
                customer_uuid, 'enabled' if enable.enabled else 'disabled')
            utils.audit_trail('Change enable',
                              request.transaction_id,
                              request.headers,
                              customer_uuid,
                              event_details=event_details)

        except ErrorStatus as exception:
            LOG.log_exception("EnabledController - Failed to Change enable",
                              exception)
            raise err_utils.get_error(request.transaction_id,
                                      message=exception.message,
                                      status_code=exception.status_code)

        except Exception as exception:
            LOG.log_exception(
                "EnabledController - change enable (put) - Failed to Change enable",
                exception)
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=str(exception))

        return result
コード例 #16
0
    def put(self, group_id, group):
        logger.info("update group")
        authentication.authorize(request, 'group:update')

        try:
            logger.debug("update group - id {}".format(group_id))
            result = GroupService.update_group(group, group_id)
            logger.debug("group updated to :- {}".format(result))

            # build result
            group_result = OutputResource(
                result.id, result.name, repr(int(time.time() * 1000)), {
                    'self':
                    '{}/v2/orm/groups/{}'.format(request.application_url,
                                                 result.id)
                })

            event_details = 'Region group {} {} updated with regions: {}'.format(
                group_id, group.name, group.regions)
            utils.audit_trail('update group',
                              request.transaction_id,
                              request.headers,
                              group_id,
                              event_details=event_details)

        except error_base.ErrorStatus as exp:
            logger.error("group to update not found {}".format(exp))
            logger.exception(exp)
            raise err_utils.get_error(request.transaction_id,
                                      message=exp.message,
                                      status_code=exp.status_code)
        except Exception as exp:
            logger.error("fail to update groupt -- id {}".format(group_id))
            logger.exception(exp)
            raise

        return Result(group_result)
コード例 #17
0
    def delete(self, group_id):
        logger.info("delete group")
        authentication.authorize(request, 'group:delete')

        try:

            logger.debug("delete group with id {}".format(group_id))
            GroupService.delete_group(group_id)
            logger.debug("done")

            event_details = 'Region group {} deleted'.format(group_id)
            utils.audit_trail('delete group',
                              request.transaction_id,
                              request.headers,
                              group_id,
                              event_details=event_details)

        except Exception as exp:

            logger.exception("fail to delete group :- {}".format(exp))
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      error_details=exp.message)
        return
コード例 #18
0
ファイル: regions.py プロジェクト: RaigaX9/ranger
    def delete(self, region_id):
        logger.info("Delete Region")
        authentication.authorize(request, 'region:delete')

        try:

            logger.debug("delete region {}".format(region_id))
            result = RegionService.delete_region(region_id)
            logger.debug("region deleted")

            event_details = 'Region {} deleted'.format(region_id)
            utils.audit_trail('delete region',
                              request.transaction_id,
                              request.headers,
                              region_id,
                              event_details=event_details)

        except Exception as exp:
            logger.exception(
                "error in deleting region .. reason:- {}".format(exp))
            raise err_utils.get_error(request.transaction_id,
                                      status_code=500,
                                      message=exp.message)
        return
コード例 #19
0
 def test_audit_trail_offline(self, mock_audit):
     mock_audit.side_effect = Exception('boom')
     resp = utils.audit_trail('create customer', '1234',
                              {'X-RANGER-Client': 'Fred'}, '5678')
     self.assertEqual(resp, None)
コード例 #20
0
 def test_audit_trail(self, mock_init, mock_audit):
     resp = utils.audit_trail('create customer', '1234',
                              {'X-RANGER-Client': 'Fred'}, '5678')
     self.assertEqual(resp, 200)