Add a boot progress indicator
Add the indicator for boot progress, as mapped to the System ``BootProgress`` field and subvalues, which allows for API consumers to determine the current status. Related-Bug: #2041902 Change-Id: Icaf8d1ba1a46ab5ffbf8a98fc7eff020fdcecfa5
This commit is contained in:
parent
b611b93bed
commit
3c49a85c5f
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Adds a ``boot_progress`` mapped object to the System object. Inside of
|
||||||
|
this object, a ``last_state`` value maps to values provided by the
|
||||||
|
``sushy.BootProgressState`` enum.
|
||||||
|
Also exposes, for information purposes, the ``last_boot_seconds_count``,
|
||||||
|
``last_state_updated_at``, and ``oem_last_state`` values, which map to
|
||||||
|
the DMTF Redfish values ``LastBootTimeSeconds``, ``LastStateTime``,
|
||||||
|
and ``OemLastState`` fields for the ``BootProgress`` object.
|
|
@ -165,6 +165,44 @@ BOOT_SOURCE_ENABLED_ONCE = BootSourceOverrideEnabled.ONCE
|
||||||
BOOT_SOURCE_ENABLED_CONTINUOUS = BootSourceOverrideEnabled.CONTINUOUS
|
BOOT_SOURCE_ENABLED_CONTINUOUS = BootSourceOverrideEnabled.CONTINUOUS
|
||||||
|
|
||||||
|
|
||||||
|
class BootProgressStates(enum.Enum):
|
||||||
|
"""Boot System Progress Indicator constants"""
|
||||||
|
# Added in ComputerSystem 1.15.0
|
||||||
|
|
||||||
|
NONE = 'None'
|
||||||
|
"""The system is not booting."""
|
||||||
|
|
||||||
|
PRIMARY_PROCESSOR = 'PrimaryProcessorInitializationStarted'
|
||||||
|
"""Initialization of the Primary Processor has started."""
|
||||||
|
|
||||||
|
BUS = 'BusInitializationStarted'
|
||||||
|
"""Initalization of the buses has started."""
|
||||||
|
|
||||||
|
MEMORY = 'MemoryInitializationStarted'
|
||||||
|
"""Initalization of memory has started."""
|
||||||
|
|
||||||
|
SECONDARY_PROCESSOR = 'SecondaryProcessorInitializationStarted'
|
||||||
|
"""Secondary Prcessors have started initialization."""
|
||||||
|
|
||||||
|
PCI_RESOURCE_CONFIG = 'PCIResourceConfigStarted'
|
||||||
|
"""Initalizatoin of PCI Resources has started."""
|
||||||
|
|
||||||
|
HARDWARE_COMPLETE = 'SystemHardwareInitializationComplete'
|
||||||
|
"""Hardware Initialization is completed."""
|
||||||
|
|
||||||
|
SETUP = 'SetupEntered'
|
||||||
|
"""System is in the Setup utility."""
|
||||||
|
|
||||||
|
OS_BOOT_STARTED = 'OSBootStarted'
|
||||||
|
"""Boot of the Operating Sysem has started."""
|
||||||
|
|
||||||
|
OS_RUNNING = 'OSRunning'
|
||||||
|
"""Operating System Running."""
|
||||||
|
|
||||||
|
OEM = 'OEM'
|
||||||
|
"""OEM Defined Boot Progress State."""
|
||||||
|
|
||||||
|
|
||||||
class SystemType(enum.Enum):
|
class SystemType(enum.Enum):
|
||||||
"""System type constants"""
|
"""System type constants"""
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
import collections
|
import collections
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from dateutil import parser
|
||||||
|
|
||||||
from sushy import exceptions
|
from sushy import exceptions
|
||||||
from sushy.resources import base
|
from sushy.resources import base
|
||||||
from sushy.resources.chassis import chassis
|
from sushy.resources.chassis import chassis
|
||||||
|
@ -59,6 +61,23 @@ class BootField(base.CompositeField):
|
||||||
http_boot_uri = base.Field('HttpBootUri')
|
http_boot_uri = base.Field('HttpBootUri')
|
||||||
|
|
||||||
|
|
||||||
|
class BootProgressField(base.CompositeField):
|
||||||
|
|
||||||
|
last_boot_seconds_count = base.Field('LastBootTimeSeconds',
|
||||||
|
adapter=utils.int_or_none)
|
||||||
|
"""The number of seconds the last boot took to reach OSRunning."""
|
||||||
|
|
||||||
|
last_state = base.MappedField('LastState', sys_cons.BootProgressStates)
|
||||||
|
"""The last recorded boot progress states."""
|
||||||
|
|
||||||
|
last_state_updated_at = base.Field('LastStateTime',
|
||||||
|
adapter=parser.parse)
|
||||||
|
"""The date-time value when the last state field was updated."""
|
||||||
|
|
||||||
|
oem_last_state = base.Field('OemLastState')
|
||||||
|
"""The OEM last state time to describe OEM specific state information."""
|
||||||
|
|
||||||
|
|
||||||
class MemorySummaryField(base.CompositeField):
|
class MemorySummaryField(base.CompositeField):
|
||||||
health = base.Field(['Status', 'HealthRollup'])
|
health = base.Field(['Status', 'HealthRollup'])
|
||||||
"""The overall health state of memory.
|
"""The overall health state of memory.
|
||||||
|
@ -140,6 +159,9 @@ class System(base.ResourceBase):
|
||||||
|
|
||||||
_actions = ActionsField('Actions', required=True)
|
_actions = ActionsField('Actions', required=True)
|
||||||
|
|
||||||
|
boot_progress = BootProgressField('BootProgress')
|
||||||
|
"""The last updated boot progress indicator"""
|
||||||
|
|
||||||
def __init__(self, connector, identity, redfish_version=None,
|
def __init__(self, connector, identity, redfish_version=None,
|
||||||
registries=None, root=None):
|
registries=None, root=None):
|
||||||
"""A class representing a ComputerSystem
|
"""A class representing a ComputerSystem
|
||||||
|
|
|
@ -43,6 +43,12 @@
|
||||||
"UefiTargetBootSourceOverride": "/0x31/0x33/0x01/0x01",
|
"UefiTargetBootSourceOverride": "/0x31/0x33/0x01/0x01",
|
||||||
"HttpBootUri": "https://Contoso.lan/boot.iso"
|
"HttpBootUri": "https://Contoso.lan/boot.iso"
|
||||||
},
|
},
|
||||||
|
"BootProgress": {
|
||||||
|
"LastBootTimeSeconds": 66,
|
||||||
|
"LastState": "OSRunning",
|
||||||
|
"LastStateTime": "2017-05-03T23:12:37-05:00",
|
||||||
|
"OemLastState": "OS foo running."
|
||||||
|
},
|
||||||
"TrustedModules": [
|
"TrustedModules": [
|
||||||
{
|
{
|
||||||
"FirmwareVersion": "1.13b",
|
"FirmwareVersion": "1.13b",
|
||||||
|
|
|
@ -82,6 +82,14 @@ class SystemTestCase(base.TestCase):
|
||||||
.maintenance_window_start_time)
|
.maintenance_window_start_time)
|
||||||
for oem_vendor in self.sys_inst.oem_vendors:
|
for oem_vendor in self.sys_inst.oem_vendors:
|
||||||
self.assertIn(oem_vendor, ('Contoso', 'Chipwise'))
|
self.assertIn(oem_vendor, ('Contoso', 'Chipwise'))
|
||||||
|
self.assertEqual(sushy.BootProgressStates.OS_RUNNING,
|
||||||
|
self.sys_inst.boot_progress.last_state)
|
||||||
|
self.assertEqual(66,
|
||||||
|
self.sys_inst.boot_progress.last_boot_seconds_count)
|
||||||
|
self.assertEqual(parser.parse('2017-05-03T23:12:37-05:00'),
|
||||||
|
self.sys_inst.boot_progress.last_state_updated_at)
|
||||||
|
self.assertEqual("OS foo running.",
|
||||||
|
self.sys_inst.boot_progress.oem_last_state)
|
||||||
|
|
||||||
def test__parse_attributes_return(self):
|
def test__parse_attributes_return(self):
|
||||||
attributes = self.sys_inst._parse_attributes(self.json_doc)
|
attributes = self.sys_inst._parse_attributes(self.json_doc)
|
||||||
|
|
Loading…
Reference in New Issue