From f4575816be8df2d4aa9fbc7aa25e8709a5da3fb2 Mon Sep 17 00:00:00 2001
From: "patchback[bot]" <45432694+patchback[bot]@users.noreply.github.com>
Date: Tue, 27 Jun 2023 07:08:08 +0200
Subject: [PATCH] [PR #6719/22efbcc6 backport][stable-7] Fixing bug in
 get_volume_inventory (#6792)

Fixing bug in get_volume_inventory (#6719)

* Fixing bug in get_volume_inventory

* Adding changelog fragment

* sanity fix

* Update changelogs/fragments/6719-redfish-utils-fix-for-get-volume-inventory.yml

Agreed

Co-authored-by: Felix Fontein <felix@fontein.de>

* Updating changelog fragment

* Update changelogs/fragments/6719-redfish-utils-fix-for-get-volume-inventory.yml

Agreed

Co-authored-by: Felix Fontein <felix@fontein.de>

* Updating changes as per PR comments

* PR comment changes

---------

Co-authored-by: Kushal <t-s.kushal@hpe.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
(cherry picked from commit 22efbcc627764f29ce1e75f634dacab8566d2299)

Co-authored-by: TSKushal <44438079+TSKushal@users.noreply.github.com>
---
 ...ish-utils-fix-for-get-volume-inventory.yml |  2 ++
 plugins/module_utils/redfish_utils.py         | 23 +++++++++++++++++--
 2 files changed, 23 insertions(+), 2 deletions(-)
 create mode 100644 changelogs/fragments/6719-redfish-utils-fix-for-get-volume-inventory.yml

diff --git a/changelogs/fragments/6719-redfish-utils-fix-for-get-volume-inventory.yml b/changelogs/fragments/6719-redfish-utils-fix-for-get-volume-inventory.yml
new file mode 100644
index 0000000000..2bca19faf1
--- /dev/null
+++ b/changelogs/fragments/6719-redfish-utils-fix-for-get-volume-inventory.yml
@@ -0,0 +1,2 @@
+minor_changes:
+  - redfish_info - fix for ``GetVolumeInventory``, Controller name was getting populated incorrectly and duplicates were seen in the volumes retrieved (https://github.com/ansible-collections/community.general/pull/6719).
diff --git a/plugins/module_utils/redfish_utils.py b/plugins/module_utils/redfish_utils.py
index 6f010bbc9b..c16287091e 100644
--- a/plugins/module_utils/redfish_utils.py
+++ b/plugins/module_utils/redfish_utils.py
@@ -897,13 +897,13 @@ class RedfishUtils(object):
             if data.get('Members'):
                 for controller in data[u'Members']:
                     controller_list.append(controller[u'@odata.id'])
-                for c in controller_list:
+                for idx, c in enumerate(controller_list):
                     uri = self.root_uri + c
                     response = self.get_request(uri)
                     if response['ret'] is False:
                         return response
                     data = response['data']
-                    controller_name = 'Controller 1'
+                    controller_name = 'Controller %s' % str(idx)
                     if 'StorageControllers' in data:
                         sc = data['StorageControllers']
                         if sc:
@@ -912,7 +912,26 @@ class RedfishUtils(object):
                             else:
                                 sc_id = sc[0].get('Id', '1')
                                 controller_name = 'Controller %s' % sc_id
+                    elif 'Controllers' in data:
+                        response = self.get_request(self.root_uri + data['Controllers'][u'@odata.id'])
+                        if response['ret'] is False:
+                            return response
+                        data = response['data']
+
+                        if data.get('Members') and data['Members']:
+                            response = self.get_request(self.root_uri + data['Members'][0][u'@odata.id'])
+                            if response['ret'] is False:
+                                return response
+                            data = response['data']
+
+                            if data:
+                                if 'Name' in data:
+                                    controller_name = data['Name']
+                                else:
+                                    controller_id = data.get('Id', '1')
+                                    controller_name = 'Controller %s' % controller_id
                     volume_results = []
+                    volume_list = []
                     if 'Volumes' in data:
                         # Get a list of all volumes and build respective URIs
                         volumes_uri = data[u'Volumes'][u'@odata.id']