diff --git a/changelogs/fragments/4084-add-redfish-system-indicator-led.yml b/changelogs/fragments/4084-add-redfish-system-indicator-led.yml new file mode 100644 index 0000000000..e27c61e13f --- /dev/null +++ b/changelogs/fragments/4084-add-redfish-system-indicator-led.yml @@ -0,0 +1,2 @@ +minor_changes: + - redfish_command - add ``IndicatorLedOn``, ``IndicatorLedOff``, and ``IndicatorLedBlink`` commands to the Systems category for controling system LEDs (https://github.com/ansible-collections/community.general/issues/4084). diff --git a/plugins/module_utils/redfish_utils.py b/plugins/module_utils/redfish_utils.py index 378d8fa9c3..5c7cff4a09 100644 --- a/plugins/module_utils/redfish_utils.py +++ b/plugins/module_utils/redfish_utils.py @@ -732,14 +732,22 @@ class RedfishUtils(object): def get_multi_volume_inventory(self): return self.aggregate_systems(self.get_volume_inventory) - def manage_indicator_led(self, command): + def manage_system_indicator_led(self, command): + return self.manage_indicator_led(command, self.systems_uri) + + def manage_chassis_indicator_led(self, command): + return self.manage_indicator_led(command, self.chassis_uri) + + def manage_indicator_led(self, command, resource_uri=None): result = {} key = 'IndicatorLED' + if resource_uri is None: + resource_uri = self.chassis_uri payloads = {'IndicatorLedOn': 'Lit', 'IndicatorLedOff': 'Off', "IndicatorLedBlink": 'Blinking'} result = {} - response = self.get_request(self.root_uri + self.chassis_uri) + response = self.get_request(self.root_uri + resource_uri) if response['ret'] is False: return response result['ret'] = True @@ -749,7 +757,7 @@ class RedfishUtils(object): if command in payloads.keys(): payload = {'IndicatorLED': payloads[command]} - response = self.patch_request(self.root_uri + self.chassis_uri, payload) + response = self.patch_request(self.root_uri + resource_uri, payload) if response['ret'] is False: return response else: diff --git a/plugins/modules/remote_management/redfish/redfish_command.py b/plugins/modules/remote_management/redfish/redfish_command.py index 5437a79891..a38e18945e 100644 --- a/plugins/modules/remote_management/redfish/redfish_command.py +++ b/plugins/modules/remote_management/redfish/redfish_command.py @@ -318,6 +318,14 @@ EXAMPLES = ''' category: Systems command: DisableBootOverride + - name: Set system indicator LED to blink using security token for auth + community.general.redfish_command: + category: Systems + command: IndicatorLedBlink + resource_id: 437XR1138R2 + baseuri: "{{ baseuri }}" + auth_token: "{{ result.session.token }}" + - name: Add user community.general.redfish_command: category: Accounts @@ -583,7 +591,8 @@ from ansible.module_utils.common.text.converters import to_native # More will be added as module features are expanded CATEGORY_COMMANDS_ALL = { "Systems": ["PowerOn", "PowerForceOff", "PowerForceRestart", "PowerGracefulRestart", - "PowerGracefulShutdown", "PowerReboot", "SetOneTimeBoot", "EnableContinuousBootOverride", "DisableBootOverride"], + "PowerGracefulShutdown", "PowerReboot", "SetOneTimeBoot", "EnableContinuousBootOverride", "DisableBootOverride", + "IndicatorLedOn", "IndicatorLedOff", "IndicatorLedBlink"], "Chassis": ["IndicatorLedOn", "IndicatorLedOff", "IndicatorLedBlink"], "Accounts": ["AddUser", "EnableUser", "DeleteUser", "DisableUser", "UpdateUserRole", "UpdateUserPassword", "UpdateUserName", @@ -754,6 +763,8 @@ def main(): elif command == "DisableBootOverride": boot_opts['override_enabled'] = 'Disabled' result = rf_utils.set_boot_override(boot_opts) + elif command.startswith('IndicatorLed'): + result = rf_utils.manage_system_indicator_led(command) elif category == "Chassis": result = rf_utils._find_chassis_resource() @@ -769,7 +780,7 @@ def main(): else: for command in command_list: if command in led_commands: - result = rf_utils.manage_indicator_led(command) + result = rf_utils.manage_chassis_indicator_led(command) elif category == "Sessions": # execute only if we find SessionService resources