From 49e3da36461eef7a3cc9b23d31cd8ac8336dfdbc Mon Sep 17 00:00:00 2001 From: TSKushal <44438079+TSKushal@users.noreply.github.com> Date: Fri, 17 Feb 2023 12:19:54 +0530 Subject: [PATCH] Adding VerifyBiosAttributes functionality (#5900) * Adding VerifyBiosAttributes functionality * Updating authors information * PR comment changes * Update plugins/modules/redfish_command.py Agreed Co-authored-by: Felix Fontein * Adding author as redfish maintainer * Adding changelog fragment * Update changelogs/fragments/5900-adding-verifybiosattribute-fucntionality-to-redfish-command.yml Agreed Co-authored-by: Felix Fontein --------- Co-authored-by: Kushal Co-authored-by: Felix Fontein --- .github/BOTMETA.yml | 2 +- ...ibute-fucntionality-to-redfish-command.yml | 2 ++ plugins/module_utils/redfish_utils.py | 35 +++++++++++++++++++ plugins/modules/redfish_command.py | 29 +++++++++++++-- 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/5900-adding-verifybiosattribute-fucntionality-to-redfish-command.yml diff --git a/.github/BOTMETA.yml b/.github/BOTMETA.yml index 769b4d273b..7a6a1c1eea 100644 --- a/.github/BOTMETA.yml +++ b/.github/BOTMETA.yml @@ -1037,7 +1037,7 @@ files: maintainers: dagwieers $modules/redfish_: ignore: jose-delarosa - maintainers: $team_redfish + maintainers: $team_redfish TSKushal $modules/redhat_subscription.py: labels: redhat_subscription maintainers: barnabycourt alikins kahowell diff --git a/changelogs/fragments/5900-adding-verifybiosattribute-fucntionality-to-redfish-command.yml b/changelogs/fragments/5900-adding-verifybiosattribute-fucntionality-to-redfish-command.yml new file mode 100644 index 0000000000..bbbb464534 --- /dev/null +++ b/changelogs/fragments/5900-adding-verifybiosattribute-fucntionality-to-redfish-command.yml @@ -0,0 +1,2 @@ +minor_changes: + - redfish_command - adding ``VerifyBiosAttributes`` functionality (https://github.com/ansible-collections/community.general/pull/5900). diff --git a/plugins/module_utils/redfish_utils.py b/plugins/module_utils/redfish_utils.py index eadca28205..b7fda59a52 100644 --- a/plugins/module_utils/redfish_utils.py +++ b/plugins/module_utils/redfish_utils.py @@ -3163,3 +3163,38 @@ class RedfishUtils(object): if resp['ret'] and resp['changed']: resp['msg'] = 'Modified session service' return resp + + def verify_bios_attributes(self, bios_attributes): + # This method verifies BIOS attributes against the provided input + server_bios = self.get_multi_bios_attributes() + if server_bios["ret"] is False: + return server_bios + + bios_dict = {} + wrong_param = {} + + # Verify bios_attributes with BIOS settings available in the server + for key, value in bios_attributes.items(): + if key in server_bios["entries"][0][1]: + if server_bios["entries"][0][1][key] != value: + bios_dict.update({key: value}) + else: + wrong_param.update({key: value}) + + if wrong_param: + return { + "ret": False, + "msg": "Wrong parameters are provided: %s" % wrong_param + } + + if bios_dict: + return { + "ret": False, + "msg": "BIOS parameters are not matching: %s" % bios_dict + } + + return { + "ret": True, + "changed": False, + "msg": "BIOS verification completed" + } diff --git a/plugins/modules/redfish_command.py b/plugins/modules/redfish_command.py index 9d5640996a..ac19fb0e2b 100644 --- a/plugins/modules/redfish_command.py +++ b/plugins/modules/redfish_command.py @@ -239,8 +239,16 @@ options: type: bool default: false version_added: 3.7.0 + bios_attributes: + required: false + description: + - BIOS attributes that needs to be verified in the given server. + type: dict + version_added: 6.4.0 -author: "Jose Delarosa (@jose-delarosa)" +author: + - "Jose Delarosa (@jose-delarosa)" + - "T S Kushal (@TSKushal)" ''' EXAMPLES = ''' @@ -629,6 +637,17 @@ EXAMPLES = ''' category: Manager command: PowerReboot resource_id: BMC + + - name: Verify BIOS attributes + community.general.redfish_command: + category: Systems + command: VerifyBiosAttributes + baseuri: "{{ baseuri }}" + username: "{{ username }}" + password: "{{ password }}" + bios_attributes: + SubNumaClustering: "Disabled" + WorkloadProfile: "Virtualization-MaxPerformance" ''' RETURN = ''' @@ -662,7 +681,7 @@ from ansible.module_utils.common.text.converters import to_native CATEGORY_COMMANDS_ALL = { "Systems": ["PowerOn", "PowerForceOff", "PowerForceRestart", "PowerGracefulRestart", "PowerGracefulShutdown", "PowerReboot", "SetOneTimeBoot", "EnableContinuousBootOverride", "DisableBootOverride", - "IndicatorLedOn", "IndicatorLedOff", "IndicatorLedBlink", "VirtualMediaInsert", "VirtualMediaEject"], + "IndicatorLedOn", "IndicatorLedOff", "IndicatorLedBlink", "VirtualMediaInsert", "VirtualMediaEject", "VerifyBiosAttributes"], "Chassis": ["IndicatorLedOn", "IndicatorLedOff", "IndicatorLedBlink"], "Accounts": ["AddUser", "EnableUser", "DeleteUser", "DisableUser", "UpdateUserRole", "UpdateUserPassword", "UpdateUserName", @@ -726,6 +745,7 @@ def main(): ) ), strip_etag_quotes=dict(type='bool', default=False), + bios_attributes=dict(type="dict") ), required_together=[ ('username', 'password'), @@ -785,6 +805,9 @@ def main(): # Etag options strip_etag_quotes = module.params['strip_etag_quotes'] + # BIOS Attributes options + bios_attributes = module.params['bios_attributes'] + # Build root URI root_uri = "https://" + module.params['baseuri'] rf_utils = RedfishUtils(creds, root_uri, timeout, module, @@ -845,6 +868,8 @@ def main(): result = rf_utils.virtual_media_insert(virtual_media, category) elif command == 'VirtualMediaEject': result = rf_utils.virtual_media_eject(virtual_media, category) + elif command == 'VerifyBiosAttributes': + result = rf_utils.verify_bios_attributes(bios_attributes) elif category == "Chassis": result = rf_utils._find_chassis_resource()