Merge branch 'initial_api_service'

This commit is contained in:
Scott Hussey 2017-05-25 14:45:01 -05:00
commit 01ac42ce9a
4 changed files with 22 additions and 20 deletions

View File

@ -31,17 +31,21 @@ def start_api(state_manager=None, ingester=None, orchestrator=None):
control_api = falcon.API(request_type=DrydockRequest,
middleware=[AuthMiddleware(), ContextMiddleware(), LoggingMiddleware()])
# v1.0 of Drydock API
v1_0_routes = [
# API for managing orchestrator tasks
control_api.add_route('/tasks', TasksResource(state_manager=state_manager, orchestrator=orchestrator))
control_api.add_route('/tasks/{task_id}', TaskResource(state_manager=state_manager))
('/tasks', TasksResource(state_manager=state_manager, orchestrator=orchestrator)),
('/tasks/{task_id}', TaskResource(state_manager=state_manager)),
# API for managing site design data
control_api.add_route('/designs', DesignsResource(state_manager=state_manager))
control_api.add_route('/designs/{design_id}', DesignResource(state_manager=state_manager, orchestrator=orchestrator))
control_api.add_route('/designs/{design_id}/parts', DesignsPartsResource(state_manager=state_manager, ingester=ingester))
control_api.add_route('/designs/{design_id}/parts/{kind}', DesignsPartsKindsResource(state_manager=state_manager))
('/designs', DesignsResource(state_manager=state_manager)),
('/designs/{design_id}', DesignResource(state_manager=state_manager, orchestrator=orchestrator)),
('/designs/{design_id}/parts', DesignsPartsResource(state_manager=state_manager, ingester=ingester)),
('/designs/{design_id}/parts/{kind}', DesignsPartsKindsResource(state_manager=state_manager)),
('/designs/{design_id}/parts/{kind}/{name}', DesignsPartResource(state_manager=state_manager, orchestrator=orchestrator))
]
control_api.add_route('/designs/{design_id}/parts/{kind}/{name}',
DesignsPartResource(state_manager=state_manager, orchestrator=orchestrator))
for path, res in v1_0_routes:
control_api.add_route('/api/v1.0' + path, res)
return control_api

View File

@ -117,7 +117,7 @@ class DrydockRequestContext(object):
self.log_level = 'ERROR'
self.user = None
self.roles = ['anyone']
self.request_id = str(uuid.uuid4())
self.req_id = str(uuid.uuid4())
self.external_marker = None
def set_log_level(self, level):
@ -138,7 +138,7 @@ class DrydockRequestContext(object):
if x != role]
def set_external_marker(self, marker):
self.external_marker = str(marker)[:32]
self.external_marker = str(marker)[:20]
class DrydockRequest(request.Request):
context_type = DrydockRequestContext

View File

@ -72,11 +72,9 @@ class ContextMiddleware(object):
elif requested_logging == 'INFO':
ctx.set_log_level('INFO')
ctx.req_id = str(uuid.uuid4())
ext_marker = req.get_header('X-Context-Marker')
ctx.external_ctx = ext_marker if ext_marker is not None else ''
ctx.set_external_marker(ext_marker if ext_marker is not None else '')
class LoggingMiddleware(object):
@ -88,7 +86,7 @@ class LoggingMiddleware(object):
extra = {
'user': ctx.user,
'req_id': ctx.req_id,
'external_ctx': ctx.external_ctx,
'external_ctx': ctx.external_marker,
}
resp.append_header('X-Drydock-Req', ctx.req_id)
self.logger.info("%s - %s" % (req.uri, resp.status), extra=extra)

View File

@ -3,28 +3,28 @@
This is the external facing API service to control the rest
of Drydock and query Drydock-managed data.
## Endpoints ##
## v1.0 Endpoints ##
### /tasks ###
### /api/v1.0/tasks ###
POST - Create a new orchestration task and submit it for execution
GET - Get status of a task
DELETE - Cancel execution of a task if permitted
### /designs ###
### /api/v1.0/designs ###
POST - Create a new site design so design parts can be added
### /designs/{id}
### /api/v1.0/designs/{id}
GET - Get a current design if available. Param 'source=compiled' to calculate the inheritance chain and compile the effective design.
### /designs/{id}/parts
### /api/v1.0/designs/{id}/parts
POST - Submit a new design part to be ingested and added to this design
GET - View a currently defined design part
PUT - Replace an existing design part *Not Implemented*
### /designs/{id}/parts/{kind}/{name}
### /api/v1.0/designs/{id}/parts/{kind}/{name}
GET - View a single design part. param 'source=compiled' to calculate the inheritance chain and compile the effective configuration for the design part.