bug fix: return fault_info correctly
return fault_info (code, message, detail included) to user when server status is error. Change-Id: I57d8711d15e8014da29622e25b595bedff6c65f8
This commit is contained in:
parent
6e2783700e
commit
829e95b3f9
@ -401,6 +401,14 @@ server_description:
|
|||||||
in: body
|
in: body
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
|
server_fault:
|
||||||
|
description: |
|
||||||
|
A fault object. Only displayed in the failed response.
|
||||||
|
Default keys are ``code``, ``message``, and ``detail``
|
||||||
|
(response code, message, and detail respectively).
|
||||||
|
in: body
|
||||||
|
required: false
|
||||||
|
type: object
|
||||||
server_name:
|
server_name:
|
||||||
description: |
|
description: |
|
||||||
The server name.
|
The server name.
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"availability_zone": null,
|
||||||
|
"created_at": "2016-10-17T04:12:41+00:00",
|
||||||
|
"description": "this is a test server",
|
||||||
|
"image_uuid": "ac3b2291-b9ef-45f6-8eeb-21ac568a64a5",
|
||||||
|
"server_type_uuid": "28708dff-283c-449e-9bfa-a48c93480c86",
|
||||||
|
"name": "test_server",
|
||||||
|
"network_info": {
|
||||||
|
"12cffc4a-b845-409e-b589-7c84be4b10d9": {
|
||||||
|
"fixed_ips": [
|
||||||
|
{
|
||||||
|
"ip_address": "172.24.4.4",
|
||||||
|
"subnet_id": "a9d47430-f90b-4513-af5f-6315af54de7d"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ip_address": "2001:db8::a",
|
||||||
|
"subnet_id": "5e7b3e2d-f36f-4e30-874c-16c2d126fe53"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mac_address": "52:54:00:6c:c4:17",
|
||||||
|
"network": "ade2b658-929b-439f-9528-c47057960942"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"power_state": "power on",
|
||||||
|
"project_id": "c18e8a1a870d4c08a0b51ced6e0b6459",
|
||||||
|
"status": "error",
|
||||||
|
"fault_info": {
|
||||||
|
"code": 500,
|
||||||
|
"message": "fault message",
|
||||||
|
"detail": "fault detail"
|
||||||
|
},
|
||||||
|
"launched_at" : null,
|
||||||
|
"updated_at": "2016-10-17T04:12:44+00:00",
|
||||||
|
"user_id": "cdbf77d47f1d4d04ad9b7ff62b672467",
|
||||||
|
"uuid": "f978ef48-d4af-4dad-beec-e6174309bc71",
|
||||||
|
"extra": {
|
||||||
|
"My Server Name" : "Apache1"
|
||||||
|
}
|
||||||
|
}
|
@ -245,6 +245,7 @@ Response
|
|||||||
- uuid: server_uuid
|
- uuid: server_uuid
|
||||||
- status: server_status
|
- status: server_status
|
||||||
- power_state: server_power_state
|
- power_state: server_power_state
|
||||||
|
- fault_info: server_fault
|
||||||
- project_id: project_id_body
|
- project_id: project_id_body
|
||||||
- user_id: user_id_body
|
- user_id: user_id_body
|
||||||
- updated_at: updated_at
|
- updated_at: updated_at
|
||||||
@ -257,6 +258,11 @@ Response
|
|||||||
.. literalinclude:: samples/servers/server-detail-resp.json
|
.. literalinclude:: samples/servers/server-detail-resp.json
|
||||||
:language: javascript
|
:language: javascript
|
||||||
|
|
||||||
|
**Example Server Details With Fault: JSON response**
|
||||||
|
|
||||||
|
.. literalinclude:: samples/servers/server-detail-resp-when-error.json
|
||||||
|
:language: javascript
|
||||||
|
|
||||||
|
|
||||||
Update Server
|
Update Server
|
||||||
===============
|
===============
|
||||||
|
@ -406,6 +406,9 @@ class Server(base.APIBase):
|
|||||||
extra = {wtypes.text: types.jsontype}
|
extra = {wtypes.text: types.jsontype}
|
||||||
"""The meta data of the server"""
|
"""The meta data of the server"""
|
||||||
|
|
||||||
|
fault_info = {wtypes.text: types.jsontype}
|
||||||
|
"""The fault info of the server"""
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
super(Server, self).__init__(**kwargs)
|
super(Server, self).__init__(**kwargs)
|
||||||
self.fields = []
|
self.fields = []
|
||||||
@ -419,6 +422,12 @@ class Server(base.APIBase):
|
|||||||
else:
|
else:
|
||||||
network_info = {}
|
network_info = {}
|
||||||
setattr(self, 'network_info', network_info)
|
setattr(self, 'network_info', network_info)
|
||||||
|
if field == 'fault':
|
||||||
|
if kwargs.get('status', None) == 'error':
|
||||||
|
fault_info = kwargs.get(field, None)
|
||||||
|
if fault_info is not None:
|
||||||
|
fault_info = fault_info.return_dict()
|
||||||
|
setattr(self, 'fault_info', fault_info)
|
||||||
# Skip fields we do not expose.
|
# Skip fields we do not expose.
|
||||||
if not hasattr(self, field):
|
if not hasattr(self, field):
|
||||||
continue
|
continue
|
||||||
|
@ -48,6 +48,7 @@ class Server(base.MoganObject, object_base.VersionedObjectDictCompat):
|
|||||||
'availability_zone': object_fields.StringField(nullable=True),
|
'availability_zone': object_fields.StringField(nullable=True),
|
||||||
'image_uuid': object_fields.UUIDField(nullable=True),
|
'image_uuid': object_fields.UUIDField(nullable=True),
|
||||||
'nics': object_fields.ObjectField('ServerNics', nullable=True),
|
'nics': object_fields.ObjectField('ServerNics', nullable=True),
|
||||||
|
'fault': object_fields.ObjectField('ServerFault', nullable=True),
|
||||||
'node_uuid': object_fields.UUIDField(nullable=True),
|
'node_uuid': object_fields.UUIDField(nullable=True),
|
||||||
'launched_at': object_fields.DateTimeField(nullable=True),
|
'launched_at': object_fields.DateTimeField(nullable=True),
|
||||||
'extra': object_fields.FlexibleDictField(nullable=True),
|
'extra': object_fields.FlexibleDictField(nullable=True),
|
||||||
@ -100,9 +101,7 @@ class Server(base.MoganObject, object_base.VersionedObjectDictCompat):
|
|||||||
"""Converts a list of database entities to a list of formal objects."""
|
"""Converts a list of database entities to a list of formal objects."""
|
||||||
servers = []
|
servers = []
|
||||||
for obj in db_objects:
|
for obj in db_objects:
|
||||||
expected_attrs = ['nics']
|
expected_attrs = ['nics', 'fault']
|
||||||
if obj["status"] == "error":
|
|
||||||
expected_attrs.append("fault")
|
|
||||||
servers.append(Server._from_db_object(cls(context), obj,
|
servers.append(Server._from_db_object(cls(context), obj,
|
||||||
expected_attrs))
|
expected_attrs))
|
||||||
return servers
|
return servers
|
||||||
@ -131,10 +130,8 @@ class Server(base.MoganObject, object_base.VersionedObjectDictCompat):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def get(cls, context, uuid):
|
def get(cls, context, uuid):
|
||||||
"""Find a server and return a Server object."""
|
"""Find a server and return a Server object."""
|
||||||
expected_attrs = ['nics']
|
expected_attrs = ['nics', 'fault']
|
||||||
db_server = cls.dbapi.server_get(context, uuid)
|
db_server = cls.dbapi.server_get(context, uuid)
|
||||||
if db_server["status"] == "error":
|
|
||||||
expected_attrs.append("fault")
|
|
||||||
server = Server._from_db_object(cls(context), db_server,
|
server = Server._from_db_object(cls(context), db_server,
|
||||||
expected_attrs)
|
expected_attrs)
|
||||||
return server
|
return server
|
||||||
|
@ -40,6 +40,11 @@ class ServerFault(base.MoganObject, object_base.VersionedObjectDictCompat):
|
|||||||
'detail': object_fields.StringField(nullable=True),
|
'detail': object_fields.StringField(nullable=True),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def return_dict(self):
|
||||||
|
return dict((k, getattr(self, k))
|
||||||
|
for k in ['code', 'message', 'detail']
|
||||||
|
if hasattr(self, k))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _from_db_object(context, fault, db_fault):
|
def _from_db_object(context, fault, db_fault):
|
||||||
for key in fault.fields:
|
for key in fault.fields:
|
||||||
|
@ -382,7 +382,7 @@ class _TestObject(object):
|
|||||||
# version bump. It is md5 hash of object fields and remotable methods.
|
# version bump. It is md5 hash of object fields and remotable methods.
|
||||||
# The fingerprint values should only be changed if there is a version bump.
|
# The fingerprint values should only be changed if there is a version bump.
|
||||||
expected_object_fingerprints = {
|
expected_object_fingerprints = {
|
||||||
'Server': '1.0-5754f46d83e55a0284fcd1188ba601a2',
|
'Server': '1.0-f3ef6866ef8072b063014a2c49060c6d',
|
||||||
'ComputeNode': '1.0-36221253681d9acb88efe2a9113071c7',
|
'ComputeNode': '1.0-36221253681d9acb88efe2a9113071c7',
|
||||||
'ComputeNodeList': '1.0-33a2e1bb91ad4082f9f63429b77c1244',
|
'ComputeNodeList': '1.0-33a2e1bb91ad4082f9f63429b77c1244',
|
||||||
'ComputePort': '1.0-ca4c1817ad7324286813f2cfcdcf802e',
|
'ComputePort': '1.0-ca4c1817ad7324286813f2cfcdcf802e',
|
||||||
|
Loading…
Reference in New Issue
Block a user