Add more attributes in RSD 2.1 chassis resource
Change-Id: I6df96c4800d9dcd5249181c15c87c211da72a6a2
This commit is contained in:
parent
2568b89225
commit
d9b65a4433
@ -14,6 +14,9 @@
|
||||
# under the License.
|
||||
|
||||
from sushy.resources import base
|
||||
from sushy import utils
|
||||
|
||||
from rsd_lib import utils as rsd_lib_utils
|
||||
|
||||
|
||||
class StatusField(base.CompositeField):
|
||||
@ -22,6 +25,60 @@ class StatusField(base.CompositeField):
|
||||
health_rollup = base.Field('HealthRollup')
|
||||
|
||||
|
||||
class LinksField(base.CompositeField):
|
||||
contains = base.Field('Contains', adapter=utils.get_members_identities)
|
||||
"""Any other chassis that this chassis has in it"""
|
||||
|
||||
contained_by = base.Field('ContainedBy',
|
||||
adapter=rsd_lib_utils.get_resource_identity)
|
||||
"""The resource that represents the chassis that contains this chassis
|
||||
and shall be of type Chassis
|
||||
"""
|
||||
|
||||
computer_systems = base.Field('ComputerSystems',
|
||||
adapter=utils.get_members_identities)
|
||||
"""The computer systems contained in this chassis"""
|
||||
|
||||
managed_by = base.Field('ManagedBy', adapter=utils.get_members_identities)
|
||||
"""The managers contained in this chassis"""
|
||||
|
||||
managers_in_chassis = base.Field('ManagersInChassis',
|
||||
adapter=utils.get_members_identities)
|
||||
"""The managers located in this chassis"""
|
||||
|
||||
switches = base.Field(['Oem', 'Intel_RackScale', 'Switches'],
|
||||
adapter=utils.get_members_identities)
|
||||
"""The Ethernet switches contained in this chassis"""
|
||||
|
||||
|
||||
class LocationField(base.CompositeField):
|
||||
identity = base.Field('Id')
|
||||
"""The location ID of the chassis"""
|
||||
|
||||
parent_id = base.Field('ParentId')
|
||||
"""The location ID of parent chassis"""
|
||||
|
||||
|
||||
class OemField(base.CompositeField):
|
||||
location = LocationField('Location')
|
||||
"""Property that shows this chassis ID and its parent"""
|
||||
|
||||
rmm_present = base.Field('RMMPresent', adapter=bool)
|
||||
"""RMM presence in a rack"""
|
||||
|
||||
rack_supports_disaggregated_power_cooling = base.Field(
|
||||
'RackSupportsDisaggregatedPowerCooling', adapter=bool)
|
||||
"""Indicates if Rack support is disaggregated (shared) power and cooling
|
||||
capabilities
|
||||
"""
|
||||
|
||||
uuid = base.Field('UUID')
|
||||
"""Chassis unique ID"""
|
||||
|
||||
geo_tag = base.Field('GeoTag')
|
||||
"""Provides info about the geographical location of this chassis"""
|
||||
|
||||
|
||||
class Chassis(base.ResourceBase):
|
||||
identity = base.Field('Id', required=True)
|
||||
"""The chassis identity string"""
|
||||
@ -38,6 +95,12 @@ class Chassis(base.ResourceBase):
|
||||
name = base.Field('Name')
|
||||
"""The chassis name"""
|
||||
|
||||
model = base.Field('Model')
|
||||
"""The chassis Model"""
|
||||
|
||||
indicator_led = base.Field('IndicatorLED')
|
||||
"""The state of the indicator LED, used to identify the chassis"""
|
||||
|
||||
part_number = base.Field('PartNumber')
|
||||
"""The chassis part number"""
|
||||
|
||||
@ -53,8 +116,11 @@ class Chassis(base.ResourceBase):
|
||||
chassis_type = base.Field('ChassisType')
|
||||
"""The chassis type"""
|
||||
|
||||
oem = base.Field('Oem')
|
||||
"""The chassis oem options values (dict)"""
|
||||
oem = OemField(['Oem', 'Intel_RackScale'])
|
||||
"""The chassis oem object"""
|
||||
|
||||
links = LinksField('Links')
|
||||
"""The link section of chassis"""
|
||||
|
||||
def __init__(self, connector, identity, redfish_version=None):
|
||||
"""A class representing a Chassis
|
||||
|
@ -1,13 +1,55 @@
|
||||
{
|
||||
"@odata.context": "/redfish/v1/$metadata#Chassis/Members/$entity",
|
||||
"@odata.id": "/redfish/v1/Chassis/Chassis1",
|
||||
"@odata.type": "#Chassis.1.0.0.Chassis",
|
||||
"@odata.id": "/redfish/v1/Chassis/1",
|
||||
"@odata.type": "#Chassis.v1_3_0.Chassis",
|
||||
"Id": "1",
|
||||
"ChassisType": "RackMount",
|
||||
"Name": "name-as-string",
|
||||
"Description": "description-as-string",
|
||||
"Manufacturer": "Intel Corporation",
|
||||
"Model": "model-as-string",
|
||||
"SKU": "sku-as-string",
|
||||
"SerialNumber": "serial-number-as-string",
|
||||
"PartNumber": "part-number-as-string",
|
||||
"AssetTag": "FlexChassis1",
|
||||
"ChassisType": "Drawer",
|
||||
"Description": "this is a chassis",
|
||||
"Id": "Chassis1",
|
||||
"IndicatorLED": "On",
|
||||
"IndicatorLED": "Unknown",
|
||||
"Status": {
|
||||
"State": "Enabled",
|
||||
"Health": "OK"
|
||||
},
|
||||
"Oem": {
|
||||
"Intel_RackScale": {
|
||||
"@odata.type": "#Intel.Oem.RackChassis",
|
||||
"Location": {
|
||||
"Id": "Rack1",
|
||||
"ParentId": "Pod1"
|
||||
},
|
||||
"RMMPresent": true,
|
||||
"RackSupportsDisaggregatedPowerCooling": true,
|
||||
"UUID": "Unique ID",
|
||||
"GeoTag": "54.348103, 18.645172"
|
||||
}
|
||||
},
|
||||
"ThermalZones": {
|
||||
"@odata.id": "/redfish/v1/Chassis/Rack1/ThermalZones"
|
||||
},
|
||||
"PowerZones": {
|
||||
"@odata.id": "/redfish/v1/Chassis/Rack1/PowerZones"
|
||||
},
|
||||
"Thermal": {
|
||||
"@odata.id": "/redfish/v1/Chassis/Rack1/Thermal"
|
||||
},
|
||||
"Power": {
|
||||
"@odata.id": "/redfish/v1/Chassis/Rack1/Power"
|
||||
},
|
||||
"Links": {
|
||||
"@odata.type": "#Chassis.v1_2_0.Links",
|
||||
"Contains": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Chassis/Drawer1"
|
||||
}
|
||||
],
|
||||
"ContainedBy": null,
|
||||
"ComputerSystems": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Systems/system1"
|
||||
@ -22,52 +64,21 @@
|
||||
"@odata.id": "/redfish/v1/Systems/system4"
|
||||
}
|
||||
],
|
||||
"ContainedBy": {
|
||||
"@odata.id": "/redfish/v1/Chassis/Rack1"
|
||||
},
|
||||
"Contains": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Chassis/Chassis1"
|
||||
}
|
||||
],
|
||||
"ManagedBy": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Managers/manager1"
|
||||
"@odata.id": "/redfish/v1/Managers/RMM"
|
||||
}
|
||||
],
|
||||
"ManagersIn": [
|
||||
"ManagersInChassis": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Managers/manager1"
|
||||
"@odata.id": "/redfish/v1/Managers/RMM"
|
||||
}
|
||||
],
|
||||
"Oem": { },
|
||||
"Switches": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/EthernetSwitches/switch1"
|
||||
"Oem": {
|
||||
"Intel_RackScale": {
|
||||
"@odata.type": "#Intel.Oem.ChassisLinks",
|
||||
"Switches": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"Manufacturer": "Intel Corporaion",
|
||||
"Model": "Lenovo FLEX 8731",
|
||||
"Name": "FLEX-1",
|
||||
"Oem": {
|
||||
"Intel:RackScale": {
|
||||
"@odata.type": "#Intel.Oem.Chassis",
|
||||
"Location": {
|
||||
"Rack": "Rack1",
|
||||
"UHeight": "10 U",
|
||||
"ULocation": "25 U",
|
||||
"UWidth": "1 U"
|
||||
},
|
||||
"UUID": "e1c2d764-5c72-36d6-9945-a78255edab51"
|
||||
}
|
||||
},
|
||||
"PartNumber": "5c72-36d6",
|
||||
"SKU": "e1c2d764-5c72",
|
||||
"SerialNumber": "a78255edab51",
|
||||
"Status": {
|
||||
"Health": "OK",
|
||||
"HealthRollup": "OK",
|
||||
"State": "Enabled"
|
||||
}
|
||||
}
|
@ -37,19 +37,45 @@ class TestChassis(base.TestCase):
|
||||
self.chassis_inst._parse_attributes()
|
||||
self.assertEqual('1.0.2', self.chassis_inst.redfish_version)
|
||||
self.assertEqual('FlexChassis1', self.chassis_inst.asset_tag)
|
||||
self.assertEqual('Drawer', self.chassis_inst.chassis_type)
|
||||
self.assertEqual('this is a chassis', self.chassis_inst.description)
|
||||
self.assertEqual('Chassis1', self.chassis_inst.identity)
|
||||
self.assertEqual('Intel Corporaion', self.chassis_inst.manufacturer)
|
||||
self.assertEqual('FLEX-1', self.chassis_inst.name)
|
||||
self.assertEqual('5c72-36d6', self.chassis_inst.part_number)
|
||||
self.assertEqual('a78255edab51', self.chassis_inst.serial_number)
|
||||
self.assertEqual('e1c2d764-5c72', self.chassis_inst.sku)
|
||||
self.assertEqual('e1c2d764-5c72-36d6-9945-a78255edab51',
|
||||
self.chassis_inst.oem['Intel:RackScale']['UUID'])
|
||||
self.assertEqual('RackMount', self.chassis_inst.chassis_type)
|
||||
self.assertEqual(
|
||||
'description-as-string', self.chassis_inst.description)
|
||||
self.assertEqual('1', self.chassis_inst.identity)
|
||||
self.assertEqual('Intel Corporation', self.chassis_inst.manufacturer)
|
||||
self.assertEqual('name-as-string', self.chassis_inst.name)
|
||||
self.assertEqual(
|
||||
'part-number-as-string', self.chassis_inst.part_number)
|
||||
self.assertEqual(
|
||||
'serial-number-as-string', self.chassis_inst.serial_number)
|
||||
self.assertEqual('sku-as-string', self.chassis_inst.sku)
|
||||
self.assertEqual('model-as-string', self.chassis_inst.model)
|
||||
self.assertEqual('Unknown', self.chassis_inst.indicator_led)
|
||||
self.assertEqual('Enabled', self.chassis_inst.status.state)
|
||||
self.assertEqual('OK', self.chassis_inst.status.health)
|
||||
self.assertEqual('OK', self.chassis_inst.status.health_rollup)
|
||||
self.assertEqual(None, self.chassis_inst.status.health_rollup)
|
||||
# chassis links section
|
||||
self.assertEqual(
|
||||
('/redfish/v1/Chassis/Drawer1',), self.chassis_inst.links.contains)
|
||||
self.assertEqual(None, self.chassis_inst.links.contained_by)
|
||||
self.assertEqual(
|
||||
('/redfish/v1/Systems/system1', '/redfish/v1/Systems/system2',
|
||||
'/redfish/v1/Systems/system3', '/redfish/v1/Systems/system4'),
|
||||
self.chassis_inst.links.computer_systems)
|
||||
self.assertEqual(
|
||||
('/redfish/v1/Managers/RMM',), self.chassis_inst.links.managed_by)
|
||||
self.assertEqual(
|
||||
('/redfish/v1/Managers/RMM',),
|
||||
self.chassis_inst.links.managers_in_chassis)
|
||||
self.assertEqual((), self.chassis_inst.links.switches)
|
||||
# chassis oem section
|
||||
self.assertEqual('Rack1', self.chassis_inst.oem.location.identity)
|
||||
self.assertEqual('Pod1', self.chassis_inst.oem.location.parent_id)
|
||||
self.assertEqual(True, self.chassis_inst.oem.rmm_present)
|
||||
self.assertEqual(
|
||||
True,
|
||||
self.chassis_inst.oem.rack_supports_disaggregated_power_cooling)
|
||||
self.assertEqual('Unique ID', self.chassis_inst.oem.uuid)
|
||||
self.assertEqual('54.348103, 18.645172', self.chassis_inst.oem.geo_tag)
|
||||
|
||||
|
||||
class TestChassisCollection(base.TestCase):
|
||||
|
Loading…
x
Reference in New Issue
Block a user