Example #1
0
    def post(self, rule_id):
        """
        Move a replication rule.

        .. :quickref: MoveRule; move rule

        :status 200: Rule found
        :status 401: Invalid Auth Token
        :status 404: no rule found for id
        :status 409: Rule replace failed.
        :returns: List of rule ids.
        """
        parameters = json_parameters()
        rse_expression = param_get(parameters, 'rse_expression')
        rule_id = param_get(parameters, 'rule_id', default=rule_id)
        try:
            rule_ids = move_replication_rule(
                rule_id=rule_id,
                rse_expression=rse_expression,
                issuer=request.environ.get('issuer'),
                vo=request.environ.get('vo'))
        except RuleReplaceFailed as error:
            return generate_http_error_flask(409, error)
        except RuleNotFound as error:
            return generate_http_error_flask(404, error)

        return Response(dumps(rule_ids), status=201)
Example #2
0
    def POST(self, rule_id):
        """
        Move a replication rule.

        HTTP Success:
            201 Created

        HTTP Error:
            400 Bad Request
            401 Unauthorized
            404 Not Found
            409 Conflict
            500 Internal Error
        """
        json_data = data()
        try:
            params = loads(json_data)
            rule_id = params['rule_id']
            rse_expression = params['rse_expression']
        except ValueError:
            raise generate_http_error(400, 'ValueError',
                                      'Cannot decode json parameter list')

        try:
            rule_ids = move_replication_rule(rule_id=rule_id,
                                             rse_expression=rse_expression,
                                             issuer=ctx.env.get('issuer'),
                                             vo=ctx.env.get('vo'))
        except RuleReplaceFailed as error:
            raise generate_http_error(409, 'RuleReplaceFailed', error.args[0])
        except RuleNotFound as error:
            raise generate_http_error(404, 'RuleNotFound', error.args[0])
        except RucioException as error:
            raise generate_http_error(500, error.__class__.__name__,
                                      error.args[0])
        except Exception as error:
            print(error)
            print(format_exc())
            raise InternalError(error)

        raise Created(dumps(rule_ids))
Example #3
0
    def post(self, rule_id):
        """
        Move a replication rule.

        .. :quickref: MoveRule; move rule

        :status 200: Rule found
        :status 401: Invalid Auth Token
        :status 404: no rule found for id
        :status 409: Rule replace failed.
        :returns: List of rule ids.
        """
        json_data = request.data
        try:
            params = loads(json_data)
            rule_id = params['rule_id']
            rse_expression = params['rse_expression']
        except ValueError:
            return generate_http_error_flask(
                400, 'ValueError', 'Cannot decode json parameter list')

        try:
            rule_ids = move_replication_rule(
                rule_id=rule_id,
                rse_expression=rse_expression,
                issuer=request.environ.get('issuer'))
        except RuleReplaceFailed as error:
            return generate_http_error_flask(409, 'RuleReplaceFailed',
                                             error.args[0])
        except RuleNotFound as error:
            return generate_http_error_flask(404, 'RuleNotFound',
                                             error.args[0])
        except RucioException as error:
            return generate_http_error_flask(500, error.__class__.__name__,
                                             error.args[0])
        except Exception as error:
            print(error)
            print(format_exc())
            return error, 500

        return Response(dumps(rule_ids), status=201)
Example #4
0
    def post(self, rule_id):
        """
        ---
        summary: Move a replication Rule
        tags:
          - Rule
        parameters:
        - name: rule_id
          in: path
          description: The id of the replication rule.
          schema:
            type: string
          style: simple
        requestBody:
          content:
            'application/json':
              schema:
                type: object
                required:
                - rse_expression
                properties:
                  rse_expression:
                    description: The new rse expression.
                    type: string
                  rule_id:
                    description: The rule_id of the rule to moves. If specified, overrides the `rule_id` parameter.
                    type: string
                  activity:
                    description: The `activity` of the moved rule.
                    type: string
                  source_replica_expression:
                    description: The `source_replica_expression` of the moved rule.
                    type: string
        responses:
          200:
            description: OK
            content:
              application/json:
                schema:
                  type: array
                  items:
                    type: string
                    description: Rule id.
          401:
            description: Invalid Auth Token
          404:
            description: No rule found for the given id
          409:
            description: Rule replace failed.
        """
        parameters = json_parameters()
        rse_expression = param_get(parameters, 'rse_expression')
        rule_id = param_get(parameters, 'rule_id', default=rule_id)
        override = param_get(parameters, 'override', default={})

        # For backwards-compatibility, deprecate in the future.
        activity = param_get(parameters, 'activity', default=None)
        if activity and 'activity' not in override:
            override['activity'] = activity
        source_replica_expression = param_get(parameters,
                                              'source_replica_expression',
                                              default=None)
        if source_replica_expression and 'source_replica_expression' not in override:
            override['source_replica_expression'] = source_replica_expression

        try:
            rule_ids = move_replication_rule(
                rule_id=rule_id,
                rse_expression=rse_expression,
                override=override,
                issuer=request.environ.get('issuer'),
                vo=request.environ.get('vo'))
        except RuleReplaceFailed as error:
            return generate_http_error_flask(409, error)
        except RuleNotFound as error:
            return generate_http_error_flask(404, error)

        return Response(dumps(rule_ids), status=201)