blob: 544abda68fd6d315fa18882e3ff77f62e1aa7130 [file] [log] [blame]
#!/usr/bin/env python
r"""
Redfish function for traversing the resource model.
"""
def get_url_list(json_data):
r"""
Return list of fully qualified URI paths.
Description of argument(s):
json_data Dictionary data from "GET" request.
Resource model tree layout:
root("/redfish/v1/") -> "/redfish/v1/Chassis" -> End resource
Example: JSON response data input
{
"@odata.context": "/redfish/v1/$metadata#ServiceRoot.ServiceRoot",
"@odata.id": "/redfish/v1/",
"@odata.type": "#ServiceRoot.v1_1_1.ServiceRoot",
"AccountService": {
"@odata.id": "/redfish/v1/AccountService"
},
"Chassis": {
"@odata.id": "/redfish/v1/Chassis"
},
"Id": "RootService",
"Links": {
"Sessions": {
"@odata.id": "/redfish/v1/SessionService/Sessions"
}
},
"Managers": {
"@odata.id": "/redfish/v1/Managers"
},
"Name": "Root Service",
"RedfishVersion": "1.1.0",
"SessionService": {
"@odata.id": "/redfish/v1/SessionService/"
},
"Systems": {
"@odata.id": "/redfish/v1/Systems"
},
"UUID": "00000000-0000-0000-0000-000000000000",
"UpdateService": {
"@odata.id": "/redfish/v1/UpdateService"
}
}
Returns list of URI's ['/redfish/v1/Managers',
'/redfish/v1/Links',
'/redfish/v1/AccountService',
'/redfish/v1/UpdateService',
'/redfish/v1/Chassis',
'/redfish/v1/Systems',
'/redfish/v1/SessionService']
"""
base_uri = "/redfish/v1/"
qualified_uri_list = []
# Example of non-root child resource object schema.
# {
# "@odata.context": "/redfish/v1/$metadata#ChassisCollection.ChassisCollection",
# "@odata.id": "/redfish/v1/Chassis",
# "@odata.type": "#ChassisCollection.ChassisCollection",
# "Members": [
# {
# "@odata.id": "/redfish/v1/Chassis/motherboard"
# },
# {
# "@odata.id": "/redfish/v1/Chassis/system"
# }
# ],
# "Members@odata.count": 2,
# "Name": "Chassis Collection"
# }
# If non-root resource schema.
if "Members" in json_data:
for member in json_data["Members"]:
qualified_uri_list.extend(member.values())
return qualified_uri_list
# Example of non-root and is the last child resource in the tree.
# {
# "@odata.context": "/redfish/v1/$metadata#Chassis.Chassis",
# "@odata.id": "/redfish/v1/Chassis",
# "@odata.type": "#Chassis.v1_4_0.Chassis",
# "BuildDate": "1996-01-01 - 00:00:00",
# "ChassisType": "RackMount",
# "Id": "motherboard",
# "Manufacturer": "0000000000000000",
# "Model": "",
# "Name": "motherboard",
# "PartNumber": "00VK525 ",
# "SerialNumber": "Y130UF72700J ",
# "Thermal": {
# "@odata.id": "/redfish/v1/Chassis/motherboard/Thermal"
# }
# }
# If non-root and is the last child resource.
if json_data["Name"] != "Root Service" and "Members" not in json_data:
# Return empty list.
return qualified_uri_list
# If root "/redfish/v1/" path resource schema.
for k, v in json_data.items():
# Find if the dictionary contains a nested dict.
# The instance existence indicates a sub-uri which hold by that
# dictionary is a resource object for next sub tree elements.
if isinstance(v, dict):
# Example : 'Managers', 'Links', 'AccountService' etc.
# into qualified URI '/redfish/v1/Managers'
qualified_uri = base_uri + str(k)
qualified_uri_list.append(qualified_uri)
return qualified_uri_list