Added API to get and delete uuid from RMS service
Change-Id: I12b86e8b4264205ea7daa6729e37215a2d4dfb79
This commit is contained in:
parent
97f8c419be
commit
7767e6bc7f
@ -22,6 +22,58 @@ def respond(reason, code, message):
|
||||
|
||||
|
||||
class UUIDController(RestController):
|
||||
@expose(template='json')
|
||||
def get(self, **kw):
|
||||
if 'uuid' in kw:
|
||||
uuid = kw['uuid']
|
||||
else:
|
||||
response.status = 400
|
||||
messageToReturn = respond(
|
||||
"badRequest", response.status, 'Missing UUID parameter.')
|
||||
return messageToReturn
|
||||
|
||||
try:
|
||||
db_manager = DBManager()
|
||||
results = db_manager.get_uuid_details(uuid)
|
||||
if results is None:
|
||||
response.status = 404
|
||||
messageToReturn = respond(
|
||||
"badRequest", response.status, 'UUID not found')
|
||||
return messageToReturn
|
||||
|
||||
return results.get_dict()
|
||||
except Exception as e:
|
||||
response.status = 500
|
||||
messageToReturn = respond(
|
||||
"badRequest", response.status, 'Database error')
|
||||
LOG.error(str(messageToReturn) + "Exception: " + str(e))
|
||||
return messageToReturn
|
||||
|
||||
@expose(template='json')
|
||||
def delete(self, **kw):
|
||||
if 'uuid' in kw:
|
||||
uuid = kw['uuid']
|
||||
else:
|
||||
response.status = 400
|
||||
messageToReturn = respond(
|
||||
"badRequest", response.status, 'Missing UUID parameter.')
|
||||
return messageToReturn
|
||||
|
||||
try:
|
||||
db_manager = DBManager()
|
||||
results = db_manager.delete_uuid(uuid)
|
||||
if results == 0:
|
||||
response.status = 404
|
||||
messageToReturn = respond(
|
||||
"badRequest", response.status, 'UUID not found')
|
||||
return messageToReturn
|
||||
except Exception as e:
|
||||
response.status = 500
|
||||
messageToReturn = respond(
|
||||
"badRequest", response.status, 'Database error')
|
||||
LOG.error(str(messageToReturn) + "Exception: " + str(e))
|
||||
return messageToReturn
|
||||
|
||||
@expose(template='json')
|
||||
def post(self, **kw):
|
||||
"""Method to handle POST /v1/uuids - create and return a new uuid
|
||||
|
@ -13,7 +13,8 @@ class DBManager(object):
|
||||
if not connection_string:
|
||||
connection_string = conf.database.connection_string
|
||||
|
||||
self._engine_facade = LegacyEngineFacade(connection_string, autocommit=False)
|
||||
self._engine_facade = LegacyEngineFacade(connection_string,
|
||||
autocommit=False)
|
||||
self._session = None
|
||||
|
||||
def get_session(self):
|
||||
@ -52,6 +53,31 @@ class DBManager(object):
|
||||
self.session.commit()
|
||||
self.session.close()
|
||||
self.engine.dispose()
|
||||
except SystemError as ex:
|
||||
logger.exception(ex)
|
||||
except Exception as ex:
|
||||
logger.exception(
|
||||
"Error adding uuid {} : {}".format(_uuid, str(exp)))
|
||||
raise ex
|
||||
|
||||
def get_uuid_details(self, _uuid):
|
||||
try:
|
||||
self.begin_transaction()
|
||||
uuid = self.session.query(UUID).filter(UUID.uuid == _uuid)
|
||||
self.close()
|
||||
return uuid.first()
|
||||
except Exception as ex:
|
||||
logger.exception(
|
||||
"Error getting uuid {} : {}".format(_uuid, str(exp)))
|
||||
raise ex
|
||||
|
||||
def delete_uuid(self, _uuid):
|
||||
try:
|
||||
self.begin_transaction()
|
||||
result = self.session.query(UUID).filter(
|
||||
UUID.uuid == _uuid).delete()
|
||||
self.session.commit()
|
||||
self.close()
|
||||
return result
|
||||
except Exception as ex:
|
||||
logger.exception(
|
||||
"Error deleting uuid {} : {}".format(_uuid, str(exp)))
|
||||
raise ex
|
||||
|
@ -19,3 +19,11 @@ class UUID(declarative_base(), UUIDBaseModel):
|
||||
id = Column(Integer, primary_key=True)
|
||||
uuid = Column(String, nullable=False, unique=True)
|
||||
uuid_type = Column(String, nullable=True, unique=True)
|
||||
|
||||
def __json__(self):
|
||||
return dict(id=self.id,
|
||||
uuid=self.uuid,
|
||||
uuid_type=self.uuid_type)
|
||||
|
||||
def get_dict(self):
|
||||
return self.__json__()
|
||||
|
@ -0,0 +1,77 @@
|
||||
import json
|
||||
import logging
|
||||
|
||||
from orm.common.orm_common.utils import api_error_utils as err_utils
|
||||
from orm.services.region_manager.rms.utils import authentication
|
||||
|
||||
from pecan import conf
|
||||
from pecan import request
|
||||
from pecan import rest
|
||||
import requests
|
||||
import wsme
|
||||
from wsme import types as wtypes
|
||||
from wsmeext.pecan import wsexpose
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class UUIDData(wtypes.DynamicBase):
|
||||
id = wsme.wsattr(wtypes.text, mandatory=True)
|
||||
uuid = wsme.wsattr(wtypes.text, mandatory=True)
|
||||
uuid_type = wsme.wsattr(wtypes.text, mandatory=True)
|
||||
|
||||
def __init__(self, id=None, uuid=None, uuid_type=None):
|
||||
self.id = id
|
||||
self.uuid = uuid
|
||||
self.uuid_type = uuid_type
|
||||
|
||||
|
||||
class UUIDController(rest.RestController):
|
||||
|
||||
@wsexpose(UUIDData, str, status_code=200, rest_content_types='json')
|
||||
def get_one(self, uuid):
|
||||
logger.info("UUIDController - Getting UUID " + uuid)
|
||||
authentication.authorize(request, 'uuid:get_one')
|
||||
|
||||
url = conf.api.uuid_server.base + conf.api.uuid_server.uuids
|
||||
try:
|
||||
resp = requests.get(url, params={'uuid': uuid})
|
||||
except Exception as ex:
|
||||
logger.exception(
|
||||
"Failed to get uuid : {}".format(str(ex)))
|
||||
raise err_utils.get_error(request.transaction_id,
|
||||
status_code=500,
|
||||
error_details=str(ex))
|
||||
|
||||
if resp.status_code != 200:
|
||||
message = "Failed to uuid {}: {}".format(uuid, resp.text)
|
||||
raise err_utils.get_error(request.transaction_id,
|
||||
status_code=resp.status_code,
|
||||
error_details=message)
|
||||
|
||||
uuid_data = json.loads(resp.content)
|
||||
return UUIDData(id=str(uuid_data['id']),
|
||||
uuid=uuid_data['uuid'],
|
||||
uuid_type=uuid_data['uuid_type'])
|
||||
|
||||
@wsexpose(None, str, rest_content_types='json', status_code=204)
|
||||
def delete(self, uuid):
|
||||
logger.info("UUIDController - Deleting UUID " + uuid)
|
||||
authentication.authorize(request, 'uuid:delete')
|
||||
|
||||
url = conf.api.uuid_server.base + conf.api.uuid_server.uuids
|
||||
try:
|
||||
resp = requests.delete(url, params={'uuid': uuid})
|
||||
except Exception as ex:
|
||||
logger.exception(
|
||||
"Failed to delete uuid : {}".format(str(ex)))
|
||||
raise err_utils.get_error(request.transaction_id,
|
||||
status_code=500,
|
||||
error_details=str(ex))
|
||||
|
||||
if resp.status_code != 200:
|
||||
message = "Failed to delete uuid {}: {}".format(uuid, resp.text)
|
||||
raise err_utils.get_error(request.transaction_id,
|
||||
status_code=resp.status_code,
|
||||
error_details=message)
|
||||
return
|
@ -1,5 +1,6 @@
|
||||
"""ORM controller module."""
|
||||
from orm.services.region_manager.rms.controllers.v2.orm.resources import groups, regions
|
||||
from orm.services.region_manager.rms.controllers.v2.orm.resources import \
|
||||
groups, regions, uuid
|
||||
|
||||
|
||||
class OrmController(object):
|
||||
@ -7,3 +8,4 @@ class OrmController(object):
|
||||
|
||||
regions = regions.RegionsController()
|
||||
groups = groups.GroupsController()
|
||||
uuid = uuid.UUIDController()
|
||||
|
@ -11,6 +11,9 @@
|
||||
"lcp:get_one": "",
|
||||
"lcp:get_all": "",
|
||||
|
||||
"uuid:get_one": "",
|
||||
"uuid:delete": "rule:admin",
|
||||
|
||||
"region:get_one": "",
|
||||
"region:get_all": "",
|
||||
"region:create": "rule:admin_or_support",
|
||||
|
Loading…
x
Reference in New Issue
Block a user