api: Add response body schemas for server group APIs
Another relatively trivial one. Change-Id: I4a5ae398e141ff29db6888b5ace731c689c7d239 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
@@ -59,16 +59,15 @@ policies['prefixItems'][0]['enum'].extend(
|
||||
|
||||
create_v264 = copy.deepcopy(create_v215)
|
||||
del create_v264['properties']['server_group']['properties']['policies']
|
||||
sg_properties = create_v264['properties']['server_group']
|
||||
sg_properties['required'].remove('policies')
|
||||
sg_properties['required'].append('policy')
|
||||
sg_properties['properties']['policy'] = {
|
||||
create_v264['properties']['server_group']['required'].remove('policies')
|
||||
create_v264['properties']['server_group']['required'].append('policy')
|
||||
create_v264['properties']['server_group']['properties']['policy'] = {
|
||||
'type': 'string',
|
||||
'enum': ['anti-affinity', 'affinity',
|
||||
'soft-anti-affinity', 'soft-affinity'],
|
||||
}
|
||||
|
||||
sg_properties['properties']['rules'] = {
|
||||
create_v264['properties']['server_group']['properties']['rules'] = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'max_server_per_host':
|
||||
@@ -99,3 +98,132 @@ show_query = {
|
||||
'properties': {},
|
||||
'additionalProperties': True,
|
||||
}
|
||||
|
||||
_server_group_response = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'id': {'type': 'string', 'format': 'uuid'},
|
||||
'members': {
|
||||
'type': 'array',
|
||||
'items': {
|
||||
'type': 'string',
|
||||
'format': 'uuid',
|
||||
},
|
||||
},
|
||||
# Why yes, this is a **totally empty object**. It's removed later
|
||||
'metadata': {
|
||||
'type': 'object',
|
||||
'properties': {},
|
||||
'required': [],
|
||||
'additionalProperties': False,
|
||||
},
|
||||
'name': {'type': 'string'},
|
||||
'policies': {
|
||||
'type': 'array',
|
||||
'prefixItems': [
|
||||
{
|
||||
'type': 'string',
|
||||
'enum': ['affinity', 'anti-affinity',],
|
||||
},
|
||||
],
|
||||
'minItems': 0,
|
||||
'maxItems': 1,
|
||||
},
|
||||
},
|
||||
'required': ['id', 'members', 'metadata', 'name', 'policies'],
|
||||
'additionalProperties': False,
|
||||
}
|
||||
|
||||
_server_group_response_v213 = copy.deepcopy(_server_group_response)
|
||||
_server_group_response_v213['properties'].update({
|
||||
'project_id': parameter_types.project_id,
|
||||
'user_id': parameter_types.user_id,
|
||||
})
|
||||
_server_group_response_v213['required'].extend(['project_id', 'user_id'])
|
||||
|
||||
_server_group_response_v215 = copy.deepcopy(_server_group_response_v213)
|
||||
_server_group_response_v215['properties']['policies']['prefixItems'][0][
|
||||
'enum'
|
||||
].extend(['soft-affinity', 'soft-anti-affinity'])
|
||||
|
||||
_server_group_response_v264 = copy.deepcopy(_server_group_response_v215)
|
||||
del _server_group_response_v264['properties']['metadata']
|
||||
del _server_group_response_v264['properties']['policies']
|
||||
_server_group_response_v264['properties'].update({
|
||||
'policy': {
|
||||
'type': 'string',
|
||||
'enum': [
|
||||
'affinity',
|
||||
'anti-affinity',
|
||||
'soft-affinity',
|
||||
'soft-anti-affinity',
|
||||
],
|
||||
},
|
||||
'rules': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'max_server_per_host': {'type': 'integer'},
|
||||
},
|
||||
'required': [],
|
||||
'additionalProperties': False,
|
||||
},
|
||||
})
|
||||
_server_group_response_v264['required'].remove('metadata')
|
||||
_server_group_response_v264['required'].remove('policies')
|
||||
_server_group_response_v264['required'].extend(['policy', 'rules'])
|
||||
|
||||
show_response = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'server_group': copy.deepcopy(_server_group_response),
|
||||
},
|
||||
'required': ['server_group'],
|
||||
'additionalProperties': True,
|
||||
}
|
||||
|
||||
show_response_v213 = copy.deepcopy(show_response)
|
||||
show_response_v213['properties']['server_group'] = _server_group_response_v213
|
||||
|
||||
show_response_v215 = copy.deepcopy(show_response)
|
||||
show_response_v215['properties']['server_group'] = _server_group_response_v215
|
||||
|
||||
show_response_v264 = copy.deepcopy(show_response_v213)
|
||||
show_response_v264['properties']['server_group'] = _server_group_response_v264
|
||||
|
||||
delete_response = {'type': 'null'}
|
||||
|
||||
index_response = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'server_groups': {
|
||||
'type': 'array',
|
||||
'items': copy.deepcopy(_server_group_response),
|
||||
},
|
||||
},
|
||||
'required': ['server_groups'],
|
||||
'additionalProperties': True,
|
||||
}
|
||||
|
||||
index_response_v213 = copy.deepcopy(index_response)
|
||||
index_response_v213['properties']['server_groups'][
|
||||
'items'
|
||||
] = _server_group_response_v213
|
||||
|
||||
index_response_v215 = copy.deepcopy(index_response_v213)
|
||||
index_response_v215['properties']['server_groups'][
|
||||
'items'
|
||||
] = _server_group_response_v215
|
||||
|
||||
index_response_v264 = copy.deepcopy(index_response_v215)
|
||||
index_response_v264['properties']['server_groups'][
|
||||
'items'
|
||||
] = _server_group_response_v264
|
||||
|
||||
|
||||
create_response = copy.deepcopy(show_response)
|
||||
|
||||
create_response_v213 = copy.deepcopy(show_response_v213)
|
||||
|
||||
create_response_v215 = copy.deepcopy(show_response_v215)
|
||||
|
||||
create_response_v264 = copy.deepcopy(show_response_v264)
|
||||
|
||||
@@ -83,6 +83,7 @@ def _should_enable_custom_max_server_rules(context, rules):
|
||||
return True
|
||||
|
||||
|
||||
@validation.validated
|
||||
class ServerGroupController(wsgi.Controller):
|
||||
"""The Server group API controller for the OpenStack API."""
|
||||
|
||||
@@ -116,6 +117,10 @@ class ServerGroupController(wsgi.Controller):
|
||||
|
||||
@wsgi.expected_errors(404)
|
||||
@validation.query_schema(schema.show_query)
|
||||
@validation.response_body_schema(schema.show_response, '2.1', '2.12')
|
||||
@validation.response_body_schema(schema.show_response_v213, '2.13', '2.14')
|
||||
@validation.response_body_schema(schema.show_response_v215, '2.15', '2.63')
|
||||
@validation.response_body_schema(schema.show_response_v264, '2.64')
|
||||
def show(self, req, id):
|
||||
"""Return data about the given server group."""
|
||||
context = req.environ['nova.context']
|
||||
@@ -129,6 +134,7 @@ class ServerGroupController(wsgi.Controller):
|
||||
|
||||
@wsgi.response(204)
|
||||
@wsgi.expected_errors(404)
|
||||
@validation.response_body_schema(schema.delete_response)
|
||||
def delete(self, req, id):
|
||||
"""Delete a server group."""
|
||||
context = req.environ['nova.context']
|
||||
@@ -146,6 +152,10 @@ class ServerGroupController(wsgi.Controller):
|
||||
@wsgi.expected_errors(())
|
||||
@validation.query_schema(schema.index_query, '2.0', '2.74')
|
||||
@validation.query_schema(schema.index_query_v275, '2.75')
|
||||
@validation.response_body_schema(schema.index_response, '2.1', '2.12')
|
||||
@validation.response_body_schema(schema.index_response_v213, '2.13', '2.14') # noqa: E501
|
||||
@validation.response_body_schema(schema.index_response_v215, '2.15', '2.63') # noqa: E501
|
||||
@validation.response_body_schema(schema.index_response_v264, '2.64')
|
||||
def index(self, req):
|
||||
"""Returns a list of server groups."""
|
||||
context = req.environ['nova.context']
|
||||
@@ -180,6 +190,10 @@ class ServerGroupController(wsgi.Controller):
|
||||
@validation.schema(schema.create, "2.0", "2.14")
|
||||
@validation.schema(schema.create_v215, "2.15", "2.63")
|
||||
@validation.schema(schema.create_v264, "2.64")
|
||||
@validation.response_body_schema(schema.create_response, '2.1', '2.12')
|
||||
@validation.response_body_schema(schema.create_response_v213, '2.13', '2.14') # noqa: E501
|
||||
@validation.response_body_schema(schema.create_response_v215, '2.15', '2.63') # noqa: E501
|
||||
@validation.response_body_schema(schema.create_response_v264, '2.64')
|
||||
def create(self, req, body):
|
||||
"""Creates a new server group."""
|
||||
context = req.environ['nova.context']
|
||||
|
||||
Reference in New Issue
Block a user