Fix idempotency issues in set_bios_attributes

- Added check to see if attribute even exists, if not, it exits.
- Then checks if attribute is already set to value we want to update
  it to. If yes, then it exits and changed=False
- Otherwise updates the attribute and changed=True
pull/47622/head
Jose Delarosa 6 years ago committed by Brian Coca
parent 8592bacb23
commit 1c37471274

@ -701,6 +701,15 @@ class RedfishUtils(object):
return response
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"}
# 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"}
set_bios_attr_uri = data["@Redfish.Settings"]["SettingsObject"]["@odata.id"]
# Example: bios_attr = {\"name\":\"value\"}
@ -709,7 +718,7 @@ class RedfishUtils(object):
response = self.patch_request(self.root_uri + set_bios_attr_uri, payload, HEADERS)
if response['ret'] is False:
return response
return {'ret': True}
return {'ret': True, 'changed': True, 'msg': "Modified BIOS attribute"}
def create_bios_config_job(self):
result = {}

@ -249,7 +249,6 @@ def main():
# Return data back or fail with proper message
if result['ret'] is True:
del result['ret']
result['changed'] = True
module.exit_json(changed=True, msg='Action was successful')
else:
module.fail_json(msg=to_native(result['msg']))

@ -227,8 +227,7 @@ def main():
# Return data back or fail with proper message
if result['ret'] is True:
del result['ret']
module.exit_json(changed=True, msg='Action was successful')
module.exit_json(changed=result['changed'], msg=to_native(result['msg']))
else:
module.fail_json(msg=to_native(result['msg']))

Loading…
Cancel
Save