def delete(self, rule_id): """ --- summary: Delete a replication rule tags: - Rule parameters: - name: rule_id in: path description: The id of the replication rule. schema: type: string style: simple responses: 200: description: OK 401: description: Invalid Auth Token 404: description: No rule found for the given id """ parameters = json_parameters() purge_replicas = param_get(parameters, 'purge_replicas', default=None) try: delete_replication_rule(rule_id=rule_id, purge_replicas=purge_replicas, issuer=request.environ.get('issuer'), vo=request.environ.get('vo')) except (AccessDenied, UnsupportedOperation) as error: return generate_http_error_flask(401, error) except RuleNotFound as error: return generate_http_error_flask(404, error) return '', 200
def DELETE(self, rule_id): """ Delete a new replication rule. HTTP Success: 200 OK HTTP Error: 401 Unauthorized 404 Not Found 500 Internal Error """ json_data = data() try: purge_replicas = None params = loads(json_data) if 'purge_replicas' in params: purge_replicas = params['purge_replicas'] except ValueError: raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter list') try: delete_replication_rule(rule_id=rule_id, purge_replicas=purge_replicas, issuer=ctx.env.get('issuer')) except AccessDenied as error: raise generate_http_error(401, 'AccessDenied', error.args[0]) except UnsupportedOperation as error: raise generate_http_error(401, 'UnsupportedOperation', error.args[0]) except RuleNotFound as error: raise generate_http_error(404, 'RuleNotFound', error.args[0]) except Exception as error: raise InternalError(error) raise OK()
def delete(self, rule_id): """ Delete a new replication rule. .. :quickref: Rule; delete rule :status 200: DIDs found :status 401: Invalid Auth Token :status 404: no rule found for id """ json_data = request.data try: purge_replicas = None params = loads(json_data) if 'purge_replicas' in params: purge_replicas = params['purge_replicas'] except ValueError: return generate_http_error_flask(400, 'ValueError', 'Cannot decode json parameter list') try: delete_replication_rule(rule_id=rule_id, purge_replicas=purge_replicas, issuer=request.environ.get('issuer'), vo=request.environ.get('vo')) except AccessDenied as error: return generate_http_error_flask(401, 'AccessDenied', error.args[0]) except UnsupportedOperation as error: return generate_http_error_flask(401, 'UnsupportedOperation', error.args[0]) except RuleNotFound as error: return generate_http_error_flask(404, 'RuleNotFound', error.args[0]) except Exception as error: return error, 500 return "OK", 200
def DELETE(self, rule_id): """ Delete a new replication rule. HTTP Success: 200 OK HTTP Error: 401 Unauthorized 404 Not Found 500 Internal Error """ try: delete_replication_rule(rule_id=rule_id, issuer=ctx.env.get('issuer')) except AccessDenied, e: raise generate_http_error(401, 'AccessDenied', e.args[0][0])
def update_rule(self): """ Adds or removes the rule for the block. """ rules = list_replication_rules(filters={ 'scope': self.scope, 'name': self.block_name }) # rules = self.rcli.list_did_rules(scope=self.scope, name=self.block_name) rse_expression = 'rse=' + self.rse remove_rules = [ rule for rule in rules if rule['account'] == self.account and rule['rse_expression'] == rse_expression ] if not remove_rules and self.is_at_pnn: self.rule_exists = False if self.dry_run: logging.info("Dry run: Adding rule for dataset %s at rse %s.", self.block_name, self.rse) else: self.add_replication_rule_with_defaults( dids=[{ 'scope': self.scope, 'name': self.block_name }], copies=1, rse_expression=rse_expression, account=self.account) monitor.record_counter('cms_sync.rules_added') self.rule_exists = True elif remove_rules and not self.is_at_pnn: self.rule_exists = True if self.dry_run: logging.info("Removing rules for dataset %s at rse %s.", self.block_name, self.rse) else: for rule in remove_rules: delete_replication_rule(rule['id'], purge_replicas=False, issuer=self.account) monitor.record_counter('cms_sync.rules_removed') self.rule_exists = False
def delete(self, rule_id): """ Delete a new replication rule. .. :quickref: Rule; delete rule :status 200: DIDs found :status 401: Invalid Auth Token :status 404: no rule found for id """ parameters = json_parameters() purge_replicas = param_get(parameters, 'purge_replicas', default=None) try: delete_replication_rule(rule_id=rule_id, purge_replicas=purge_replicas, issuer=request.environ.get('issuer'), vo=request.environ.get('vo')) except (AccessDenied, UnsupportedOperation) as error: return generate_http_error_flask(401, error) except RuleNotFound as error: return generate_http_error_flask(404, error) return '', 200
def test_access_rule_vo(self): """ MULTI VO (CORE): Test accessing rules from a different VO """ scope = InternalScope('mock', **self.vo) dataset = 'dataset_' + str(generate_uuid()) account = InternalAccount('root', **self.vo) rse_str = ''.join(choice(ascii_uppercase) for x in range(10)) rse_name = 'MOCK_%s' % rse_str rse_id = add_rse(rse_name, 'root', **self.vo) add_replica(rse_id=rse_id, scope=scope, name=dataset, bytes=10, account=account) rule_id = add_rule(dids=[{'scope': scope, 'name': dataset}], account=account, copies=1, rse_expression='MOCK', grouping='NONE', weight='fakeweight', lifetime=None, locked=False, subscription_id=None)[0] with assert_raises(AccessDenied): delete_replication_rule(rule_id=rule_id, purge_replicas=False, issuer='root', **self.new_vo) # check locks are not accessible from other VO locks = list(get_replica_locks_for_rule_id(rule_id, **self.vo)) assert_equal(len(locks), 1) locks = list(get_replica_locks_for_rule_id(rule_id, **self.new_vo)) assert_equal(len(locks), 0) delete_replication_rule(rule_id=rule_id, purge_replicas=False, issuer='root', **self.vo) rule_dict = get_replication_rule(rule_id=rule_id, issuer='root', **self.vo) assert_is_not_none(rule_dict['expires_at'])