Added API to get and delete uuid from RMS service

Change-Id: I12b86e8b4264205ea7daa6729e37215a2d4dfb79
This commit is contained in:
Chi Lo 2020-01-24 11:25:32 -08:00
parent 97f8c419be
commit 7767e6bc7f
6 changed files with 172 additions and 4 deletions

View File

@ -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

View File

@ -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

View File

@ -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__()

View File

@ -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

View File

@ -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()

View File

@ -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",