6.6 KiB
single: drydock single: redfish single: BIOS configuration
Drydock: Support BIOS configuration using Redfish OOB driver
Proposal to add support for configuring BIOS settings of baremetal node via Drydock. This blueprint is intended to extend functionality of redfish OOB driver to support BIOS configuration.
Links
https://storyboard.openstack.org/#!/story/2002912
Problem description
Currently drydock does not provide a mechanism to configure BIOS settings on a baremetal node. The BIOS settings need to be configured manually prior to triggering deployment via Airship.
Impacted components
The following Airship components would be impacted by this solution:
- Drydock - Updates to Orchestrator actions and Redfish OOB driver
Proposed change
The idea is to provide user an option to specify the BIOS configuration of baremetal nodes as part of HardwareProfile yaml in site definition documents. Drydock gets this information from manifest documents and whenever Orchestrator action PrepareNodes is triggered, drydock initiates BIOS configuration via OOB drivers. As there are no new Orchestrator actions introduced, the workflow from Shipyard --> Drydock remains the same.
This spec only supports BIOS configuration via Redfish OOB driver. Documents having BIOS configuration with oob type other than Redfish (ipmi, libvirt) should result in an error during document validation. This can be achieved by adding new Validator in Drydock.
Manifest changes
A new parameter bios_settings
will be added to the HardwareProfile. The parameter takes a dictionary of strings as its value. Each key/value pair corresponds to a BIOS setting that need to be configured. This provides the deployment engineers the flexibility to modify the BIOS settings that need to be configured on baremetal node.
Sample HardwareProfile with bios_settings:
---
schema: 'drydock/HardwareProfile/v1'
metadata:
schema: 'metadata/Document/v1'
name: dell_r640_test
storagePolicy: 'cleartext'
layeringDefinition:
abstract: false
layer: global
data:
vendor: 'Dell'
generation: '8'
hw_version: '3'
bios_version: '2.2.3'
boot_mode: bios
bootstrap_protocol: pxe
pxe_interface: 0
bios_settings:
BootMode: Bios
BootSeqRetry: Disabled
InternalUsb: Off
SriovGlobalEnable: Disabled
SysProfile: PerfOptimized
AcPwrRcvry: Last
AcPwrRcvryDelay: Immediate
device_aliases:
pxe_nic01:
# eno3
address: '0000:01:00.0'
dev_type: 'Gig NIC'
bus_type: 'pci'
cpu_sets:
kvm: '4-43,48-87'
hugepages:
dpdk:
size: '1G'
count: 300
Update the HardwareProfile schema to include a new property bios_settings
of type object. The property should be optional to support backward compatibility.
Following will be added as part of HardwareProfile schema properties:
bios_settings:
type: 'object'
Redfish driver updates
Following OOB driver actions are introduced as part of this spec.
- hd_fields.OrchestratorAction.ConfigBIOS To configure the BIOS settings on the node based on HardwareProfile manifest document
To support the above actions, following redfish commands will be added -set_bios_settings, get_bios_settings
Redfish rest api calls to handle the above commands:
Command: get_bios_settings
Request: GET https://<OOB IP>/redfish/v1/Systems/<System_name>/Bios
Response: dict["Attributes"]
Command: set_bios_settings
Request: PATCH https://<OOB IP>/redfish/v1/Systems/<System_name>/Bios/Settings
{ "Attributes": {
"setting1": "value1",
"setting2": "value2"
}}
The request and response objects for the above operations differ for vendors HP and Dell. Above mentioned request/response objects are for Dell. In case of HP the request/response object will be:
{
"setting1": "value1",
"setting2": "value2"
}
In case of failures in setting BIOS configuration, the Redfish server sends the error message along with error code. The ConfigBios action should mark the task as failure and add the error message in the task status message.
Orchestrator action updates
PrepareNodes Action currently run the following driver actions in sequence
- hd_fields.OrchestratorAction.SetNodeBoot on OOB driver To set the boot mode to PXE
- hd_fields.OrchestratorAction.PowerCycleNode on OOB driver To powercycle the node
- hd_fields.OrchestratorAction.IdentifyNode on Node driver To identify the node in node driver like maas
PrepareNodes should execute the new OOB driver action as its initial step hd_fields.OrchestratorAction.ConfigBIOS
. PrepareNodes creates subtasks to execute ConfigBios action for each node and collects the subtask status until drydock timeout conf.timeouts.drydock_timeout
. In case of any failure of ConfigBios subtask for a node, further driver actions wont be executed for that node. This is in sync with the existing design and no changes required. ConfigBios action is not retried in case of failures.
Security impact
None
Performance impact
BIOS configuration update takes around 35 seconds when invoked from a node on same rack. This includes establishing a session, running the configuration API and logging out the session. Time for system restart is not included. Similarly retrieving BIOS configuration takes around 18 seconds.
Alternatives
This spec only implements BIOS configuration support for Redfish OOB driver.
Implementation
Work Items
- Update Hardware profile schema to support new attribute bios_setting
- Update Hardware profile objects
- Update Orchestrator action PrepareNodes to call OOB driver for BIOS configuration
- Update Redfish OOB driver to support new action ConfigBIOS
- Add unit test cases
Assignee(s):
- Primary Assignee:
Hemanth Nakkina
- Other contributors:
Gurpreet Singh
Dependencies
This spec depends on Introduce Redfish based OOB Driver for Drydock story.