From 447d4b026768b08f6ab3315055f1802ea7552103 Mon Sep 17 00:00:00 2001 From: Pierre-yves Fontaniere Date: Mon, 7 Oct 2024 23:00:56 +0200 Subject: [PATCH] redfish_config new bool parameter to automatically delete 'None' type volumes. (#8990) * Add a new boolean parameter storage_none_volume_deletion to the volume creation command of redfish_config * Add description for storage_none_volume_deletion redfish_config parameter * Update plugins/module_utils/redfish_utils.py Co-authored-by: Mike Raineri * Update plugins/modules/redfish_config.py Co-authored-by: Mike Raineri * Add CHANGELOG fragment * Add punctuation. --------- Co-authored-by: Pierre-yves FONTANIERE Co-authored-by: Mike Raineri Co-authored-by: Felix Fontein --- changelogs/fragments/8990.yml | 3 +++ plugins/module_utils/redfish_utils.py | 29 ++++++++++++++------------- plugins/modules/redfish_config.py | 11 +++++++++- 3 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 changelogs/fragments/8990.yml diff --git a/changelogs/fragments/8990.yml b/changelogs/fragments/8990.yml new file mode 100644 index 0000000000..716fd3c983 --- /dev/null +++ b/changelogs/fragments/8990.yml @@ -0,0 +1,3 @@ +minor_changes: + - redfish_config - add parameter ``storage_none_volume_deletion`` to + ``CreateVolume`` command in order to control the automatic deletion of non-RAID volumes (https://github.com/ansible-collections/community.general/pull/8990). \ No newline at end of file diff --git a/plugins/module_utils/redfish_utils.py b/plugins/module_utils/redfish_utils.py index 30309ac0a9..28d6f2ef0c 100644 --- a/plugins/module_utils/redfish_utils.py +++ b/plugins/module_utils/redfish_utils.py @@ -3742,7 +3742,7 @@ class RedfishUtils(object): return {'ret': True, 'changed': True, 'msg': "The following volumes were deleted: %s" % str(volume_ids)} - def create_volume(self, volume_details, storage_subsystem_id): + def create_volume(self, volume_details, storage_subsystem_id, storage_none_volume_deletion=False): # Find the Storage resource from the requested ComputerSystem resource response = self.get_request(self.root_uri + self.systems_uri) if response['ret'] is False: @@ -3794,22 +3794,23 @@ class RedfishUtils(object): data = response['data'] # Deleting any volumes of RAIDType None present on the Storage Subsystem - response = self.get_request(self.root_uri + data['Volumes']['@odata.id']) - if response['ret'] is False: - return response - volume_data = response['data'] + if storage_none_volume_deletion: + response = self.get_request(self.root_uri + data['Volumes']['@odata.id']) + if response['ret'] is False: + return response + volume_data = response['data'] - if "Members" in volume_data: - for member in volume_data["Members"]: - response = self.get_request(self.root_uri + member['@odata.id']) - if response['ret'] is False: - return response - member_data = response['data'] - - if member_data["RAIDType"] == "None": - response = self.delete_request(self.root_uri + member['@odata.id']) + if "Members" in volume_data: + for member in volume_data["Members"]: + response = self.get_request(self.root_uri + member['@odata.id']) if response['ret'] is False: return response + member_data = response['data'] + + if member_data["RAIDType"] == "None": + response = self.delete_request(self.root_uri + member['@odata.id']) + if response['ret'] is False: + return response # Construct payload and issue POST command to create volume volume_details["Links"] = {} diff --git a/plugins/modules/redfish_config.py b/plugins/modules/redfish_config.py index 03146558f3..5b9caecc64 100644 --- a/plugins/modules/redfish_config.py +++ b/plugins/modules/redfish_config.py @@ -145,6 +145,13 @@ options: type: str default: '' version_added: '7.3.0' + storage_none_volume_deletion: + required: false + description: + - Indicates if all non-RAID volumes are automatically deleted prior to creating the new volume. + type: bool + default: false + version_added: '9.5.0' volume_ids: required: false description: @@ -418,6 +425,7 @@ def main(): hostinterface_id=dict(), sessions_config=dict(type='dict', default={}), storage_subsystem_id=dict(type='str', default=''), + storage_none_volume_deletion=dict(type='bool', default=False), volume_ids=dict(type='list', default=[], elements='str'), secure_boot_enable=dict(type='bool', default=True), volume_details=dict(type='dict', default={}), @@ -484,6 +492,7 @@ def main(): # Volume creation options volume_details = module.params['volume_details'] storage_subsystem_id = module.params['storage_subsystem_id'] + storage_none_volume_deletion = module.params['storage_none_volume_deletion'] # ciphers ciphers = module.params['ciphers'] @@ -527,7 +536,7 @@ def main(): elif command == "DeleteVolumes": result = rf_utils.delete_volumes(storage_subsystem_id, volume_ids) elif command == "CreateVolume": - result = rf_utils.create_volume(volume_details, storage_subsystem_id) + result = rf_utils.create_volume(volume_details, storage_subsystem_id, storage_none_volume_deletion) elif category == "Manager": # execute only if we find a Manager service resource