def POST(self, rse, scheme): """ Create a protocol for a given RSE. HTTP Success: 201 Created HTTP Error: 400 Bad request 401 Unauthorized 404 Resource not Found 409 Conflict 500 Internal Error """ json_data = data() try: parameters = loads(json_data) except ValueError: raise generate_http_error( 400, 'ValueError', 'Cannot decode json parameter dictionary') # Fill defaults and check mandatory parameters parameters['scheme'] = scheme try: add_protocol(rse, issuer=ctx.env.get('issuer'), data=parameters) except RSENotFound, error: raise generate_http_error(404, 'RSENotFound', error[0][0])
def post(self, rse, scheme): """ Create a protocol for a given RSE. .. :quickref: Protocol; Create an RSE protocol. :param rse: The RSE name. :param scheme: The protocol identifier. :<json dict paramaters: parameter of the new protocol entry. :status 201: Created. :status 400: Cannot decode json parameter dictionary. :status 401: Invalid Auth Token. :status 404: RSE not found. :status 404: RSE Protocol Domain Not Supported. :status 409: RSE Protocol Priority Error. :status 500: Internal Error. """ json_data = request.data try: parameters = loads(json_data) except ValueError: return generate_http_error_flask( 400, 'ValueError', 'Cannot decode json parameter dictionary') # Fill defaults and check mandatory parameters parameters['scheme'] = scheme try: add_protocol(rse, issuer=request.environ.get('issuer'), data=parameters) except RSENotFound, error: return generate_http_error_flask(404, 'RSENotFound', error.args[0])
def post(self, rse, scheme): """ Create a protocol for a given RSE. .. :quickref: Protocol; Create an RSE protocol. :param rse: The RSE name. :param scheme: The protocol identifier. :<json dict paramaters: parameter of the new protocol entry. :status 201: Created. :status 400: Cannot decode json parameter dictionary. :status 401: Invalid Auth Token. :status 404: RSE not found. :status 404: RSE Protocol Domain Not Supported. :status 409: RSE Protocol Priority Error. """ parameters = json_parameters() # Fill defaults and check mandatory parameters parameters['scheme'] = scheme try: add_protocol(rse, issuer=request.environ.get('issuer'), vo=request.environ.get('vo'), data=parameters) except (RSENotFound, RSEProtocolDomainNotSupported) as error: return generate_http_error_flask(404, error) except AccessDenied as error: return generate_http_error_flask(401, error) except (Duplicate, RSEProtocolPriorityError) as error: return generate_http_error_flask(409, error) except InvalidObject as error: return generate_http_error_flask(400, error) return 'Created', 201
def POST(self, rse, scheme): """ Create a protocol for a given RSE. HTTP Success: 201 Created HTTP Error: 400 Bad request 401 Unauthorized 404 Resource not Found 409 Conflict 500 Internal Error """ json_data = data() try: parameters = loads(json_data) except ValueError: raise generate_http_error(400, 'ValueError', 'Cannot decode json parameter dictionary') # Fill defaults and check mandatory parameters parameters['scheme'] = scheme try: add_protocol(rse, issuer=ctx.env.get('issuer'), data=parameters) except RSENotFound, e: raise generate_http_error(404, 'RSENotFound', e[0][0])
def post(self, rse, scheme): """ Create a protocol for a given RSE. .. :quickref: Protocol; Create an RSE protocol. :param rse: The RSE name. :param scheme: The protocol identifier. :<json dict paramaters: parameter of the new protocol entry. :status 201: Created. :status 400: Cannot decode json parameter dictionary. :status 401: Invalid Auth Token. :status 404: RSE not found. :status 404: RSE Protocol Domain Not Supported. :status 409: RSE Protocol Priority Error. :status 500: Internal Error. """ json_data = request.data try: parameters = loads(json_data) except ValueError: return generate_http_error_flask( 400, 'ValueError', 'Cannot decode json parameter dictionary') # Fill defaults and check mandatory parameters parameters['scheme'] = scheme try: add_protocol(rse, issuer=request.environ.get('issuer'), vo=request.environ.get('vo'), data=parameters) except RSENotFound as error: return generate_http_error_flask(404, 'RSENotFound', error.args[0]) except AccessDenied as error: return generate_http_error_flask(401, 'AccessDenied', error.args[0]) except Duplicate as error: return generate_http_error_flask(409, 'Duplicate', error.args[0]) except InvalidObject as error: return generate_http_error_flask(400, 'InvalidObject', error.args[0]) except RSEProtocolDomainNotSupported as error: return generate_http_error_flask(404, 'RSEProtocolDomainNotSupported', error.args[0]) except RSEProtocolPriorityError as error: return generate_http_error_flask(409, 'RSEProtocolPriorityError', 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 "Created", 201
def POST(self, rse, scheme): """ Create a protocol for a given RSE. HTTP Success: 201 Created HTTP Error: 400 Bad request 401 Unauthorized 404 Resource not Found 409 Conflict 500 Internal Error """ json_data = data() try: parameters = loads(json_data) except ValueError: raise generate_http_error( 400, 'ValueError', 'Cannot decode json parameter dictionary') # Fill defaults and check mandatory parameters parameters['scheme'] = scheme try: add_protocol(rse, issuer=ctx.env.get('issuer'), vo=ctx.env.get('vo'), data=parameters) except RSENotFound as error: raise generate_http_error(404, 'RSENotFound', error.args[0]) except AccessDenied as error: raise generate_http_error(401, 'AccessDenied', error.args[0]) except Duplicate as error: raise generate_http_error(409, 'Duplicate', error.args[0]) except InvalidObject as error: raise generate_http_error(400, 'InvalidObject', error.args[0]) except RSEProtocolDomainNotSupported as error: raise generate_http_error(404, 'RSEProtocolDomainNotSupported', error.args[0]) except RSEProtocolPriorityError as error: raise generate_http_error(409, 'RSEProtocolPriorityError', 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()
def test_automatix(self): """ MULTI VO (DAEMON): Test that automatix runs on a single VO """ scope_client = ScopeClient() scope_uuid = str(generate_uuid()).lower()[:16] shr_scope = 'shr_%s' % scope_uuid scope_client.add_scope('root', shr_scope) add_scope(shr_scope, 'root', 'root', **self.new_vo) rse_client = RSEClient() rse_str = ''.join(choice(ascii_uppercase) for x in range(10)) shr_rse = 'SHR_%s' % rse_str mock_protocol = {'scheme': 'MOCK', 'hostname': 'localhost', 'port': 123, 'prefix': '/test/automatix', 'impl': 'rucio.rse.protocols.mock.Default', 'domains': { 'lan': {'read': 1, 'write': 1, 'delete': 1}, 'wan': {'read': 1, 'write': 1, 'delete': 1}}} rse_client.add_rse(shr_rse) rse_client.add_rse_attribute(rse=shr_rse, key='verify_checksum', value=False) rse_client.add_protocol(shr_rse, mock_protocol) add_rse(shr_rse, 'root', **self.new_vo) add_rse_attribute(rse=shr_rse, key='verify_checksum', value=False, issuer='root', **self.new_vo) add_protocol(rse=shr_rse, data=mock_protocol, issuer='root', **self.new_vo) automatix(sites=[shr_rse], inputfile='/opt/rucio/etc/automatix.json', sleep_time=30, account='root', once=True, scope=shr_scope) did_list_tst = list(DIDClient().list_dids(shr_scope, {})) did_list_new = list(list_dids(shr_scope, {}, **self.new_vo)) assert_not_equal(len(did_list_tst), 0) assert_equal(len(did_list_new), 0) did_dicts = [{'scope': shr_scope, 'name': n} for n in did_list_tst] replicas_tst = list(ReplicaClient().list_replicas(did_dicts, rse_expression=shr_rse)) replicas_new = list(list_replicas(did_dicts, rse_expression=shr_rse, **self.new_vo)) assert_not_equal(len(replicas_tst), 0) assert_equal(len(replicas_new), 0)