allow setting multiple BIOS attributes at a time (#62764)
* allow setting multiple BIOS attributes at a time * fix documentation string errors
This commit is contained in:
parent
ec1c5585af
commit
b4cd9086dc
2 changed files with 43 additions and 20 deletions
|
@ -1419,7 +1419,7 @@ class RedfishUtils(object):
|
|||
return response
|
||||
return {'ret': True, 'changed': True}
|
||||
|
||||
def set_bios_attributes(self, attr):
|
||||
def set_bios_attributes(self, attributes):
|
||||
result = {}
|
||||
key = "Bios"
|
||||
|
||||
|
@ -1442,19 +1442,27 @@ class RedfishUtils(object):
|
|||
result['ret'] = True
|
||||
data = response['data']
|
||||
|
||||
# First, check if BIOS attribute exists
|
||||
if attr['bios_attr_name'] not in data[u'Attributes']:
|
||||
return {'ret': False, 'msg': "BIOS attribute not found"}
|
||||
# Make a copy of the attributes dict
|
||||
attrs_to_patch = dict(attributes)
|
||||
|
||||
# Find out if value is already set to what we want. If yes, return
|
||||
if data[u'Attributes'][attr['bios_attr_name']] == attr['bios_attr_value']:
|
||||
return {'ret': True, 'changed': False, 'msg': "BIOS attribute already set"}
|
||||
# Check the attributes
|
||||
for attr in attributes:
|
||||
if attr not in data[u'Attributes']:
|
||||
return {'ret': False, 'msg': "BIOS attribute %s not found" % attr}
|
||||
# If already set to requested value, remove it from PATCH payload
|
||||
if data[u'Attributes'][attr] == attributes[attr]:
|
||||
del attrs_to_patch[attr]
|
||||
|
||||
# Return success w/ changed=False if no attrs need to be changed
|
||||
if not attrs_to_patch:
|
||||
return {'ret': True, 'changed': False,
|
||||
'msg': "BIOS attributes already set"}
|
||||
|
||||
# Get the SettingsObject URI
|
||||
set_bios_attr_uri = data["@Redfish.Settings"]["SettingsObject"]["@odata.id"]
|
||||
|
||||
# Example: bios_attr = {\"name\":\"value\"}
|
||||
bios_attr = "{\"" + attr['bios_attr_name'] + "\":\"" + attr['bios_attr_value'] + "\"}"
|
||||
payload = {"Attributes": json.loads(bios_attr)}
|
||||
# Construct payload and issue PATCH command
|
||||
payload = {"Attributes": attrs_to_patch}
|
||||
response = self.patch_request(self.root_uri + set_bios_attr_uri, payload)
|
||||
if response['ret'] is False:
|
||||
return response
|
||||
|
|
|
@ -51,17 +51,24 @@ options:
|
|||
bios_attribute_name:
|
||||
required: false
|
||||
description:
|
||||
- name of BIOS attribute to update
|
||||
- name of BIOS attr to update (deprecated - use bios_attributes instead)
|
||||
default: 'null'
|
||||
type: str
|
||||
version_added: "2.8"
|
||||
bios_attribute_value:
|
||||
required: false
|
||||
description:
|
||||
- value of BIOS attribute to update
|
||||
- value of BIOS attr to update (deprecated - use bios_attributes instead)
|
||||
default: 'null'
|
||||
type: str
|
||||
version_added: "2.8"
|
||||
bios_attributes:
|
||||
required: false
|
||||
description:
|
||||
- dictionary of BIOS attributes to update
|
||||
default: {}
|
||||
type: dict
|
||||
version_added: "2.10"
|
||||
timeout:
|
||||
description:
|
||||
- Timeout in seconds for URL requests to OOB controller
|
||||
|
@ -90,23 +97,25 @@ EXAMPLES = '''
|
|||
redfish_config:
|
||||
category: Systems
|
||||
command: SetBiosAttributes
|
||||
bios_attribute_name: BootMode
|
||||
bios_attribute_value: Uefi
|
||||
bios_attributes:
|
||||
BootMode: "Uefi"
|
||||
baseuri: "{{ baseuri }}"
|
||||
username: "{{ username }}"
|
||||
password: "{{ password }}"
|
||||
|
||||
- name: Set BootMode to Legacy BIOS
|
||||
- name: Set multiple BootMode attributes
|
||||
redfish_config:
|
||||
category: Systems
|
||||
command: SetBiosAttributes
|
||||
bios_attribute_name: BootMode
|
||||
bios_attribute_value: Bios
|
||||
bios_attributes:
|
||||
BootMode: "Bios"
|
||||
OneTimeBootMode: "Enabled"
|
||||
BootSeqRetry: "Enabled"
|
||||
baseuri: "{{ baseuri }}"
|
||||
username: "{{ username }}"
|
||||
password: "{{ password }}"
|
||||
|
||||
- name: Enable PXE Boot for NIC1
|
||||
- name: Enable PXE Boot for NIC1 using deprecated options
|
||||
redfish_config:
|
||||
category: Systems
|
||||
command: SetBiosAttributes
|
||||
|
@ -195,6 +204,7 @@ def main():
|
|||
password=dict(required=True, no_log=True),
|
||||
bios_attribute_name=dict(default='null'),
|
||||
bios_attribute_value=dict(default='null'),
|
||||
bios_attributes=dict(type='dict', default={}),
|
||||
timeout=dict(type='int', default=10),
|
||||
boot_order=dict(type='list', elements='str', default=[]),
|
||||
network_protocols=dict(
|
||||
|
@ -216,8 +226,13 @@ def main():
|
|||
timeout = module.params['timeout']
|
||||
|
||||
# BIOS attributes to update
|
||||
bios_attributes = {'bios_attr_name': module.params['bios_attribute_name'],
|
||||
'bios_attr_value': module.params['bios_attribute_value']}
|
||||
bios_attributes = module.params['bios_attributes']
|
||||
if module.params['bios_attribute_name'] != 'null':
|
||||
bios_attributes[module.params['bios_attribute_name']] = module.params[
|
||||
'bios_attribute_value']
|
||||
module.deprecate(msg='The bios_attribute_name/bios_attribute_value '
|
||||
'options are deprecated. Use bios_attributes instead',
|
||||
version='2.10')
|
||||
|
||||
# boot order
|
||||
boot_order = module.params['boot_order']
|
||||
|
|
Loading…
Reference in a new issue