From ff67d84ec60d0a5389d03b17fdf3378612174c53 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 21 Jun 2022 09:47:54 -0400 Subject: [PATCH] Update to newer XCC storage syntax Two new variants of XCC storage cfg have occurred, detect and handle them. Change-Id: Ie53f53093b5737a4930ecb420b087a15d8149796 --- pyghmi/ipmi/oem/lenovo/imm.py | 20 +++++++++++++++----- pyghmi/redfish/oem/lenovo/xcc.py | 20 +++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/pyghmi/ipmi/oem/lenovo/imm.py b/pyghmi/ipmi/oem/lenovo/imm.py index 0c7e0ea9..69f285e0 100644 --- a/pyghmi/ipmi/oem/lenovo/imm.py +++ b/pyghmi/ipmi/oem/lenovo/imm.py @@ -1437,6 +1437,9 @@ class XCCClient(IMMClient): url = '/api/function/raid_conf?params=raidlink_GetDefaultVolProp' args = (url, cid, 0, params['drives']) props = self.wc.grab_json_response(','.join([str(x) for x in args])) + if not props: # newer firmwarerequires raidlevel too + args = (url, cid, params['raidlevel'], 0, params['drives']) + props = self.wc.grab_json_response(','.join([str(x) for x in args])) props = props['items'][0] volumes = pool.volumes remainingcap = params['capacity'] @@ -1507,14 +1510,21 @@ class XCCClient(IMMClient): parms = {'raidlink_AddNewVolWithNaAsync': arglist} rsp = self.wc.grab_json_response(url, parms) if rsp['return'] == 14: # newer firmware - if cid[2] == 2: - cnum = cid[1] - arglist = '{0},{1},{2},{3},{4},{5},'.format( + arglist = '{0},{1},{2},{3},{4},{5},{6},'.format( cnum, params['raidlevel'], params['spans'], - params['perspan'], params['drives'], params['hotspares']) - arglist += ''.join(vols) + ',{0}'.format(cid[2]) + params['perspan'], 0, params['drives'], params['hotspares']) + arglist += ''.join(vols) parms = {'raidlink_AddNewVolWithNaAsync': arglist} rsp = self.wc.grab_json_response(url, parms) + if not rsp: # Purley + if cid[2] == 2: + cnum = cid[1] + arglist = '{0},{1},{2},{3},{4},{5},'.format( + cnum, params['raidlevel'], params['spans'], + params['perspan'], params['drives'], params['hotspares']) + arglist += ''.join(vols) + ',{0}'.format(cid[2]) + parms = {'raidlink_AddNewVolWithNaAsync': arglist} + rsp = self.wc.grab_json_response(url, parms) if rsp['return'] != 0: raise Exception( 'Unexpected response to add volume command: ' + repr(rsp)) diff --git a/pyghmi/redfish/oem/lenovo/xcc.py b/pyghmi/redfish/oem/lenovo/xcc.py index 5659d4ef..69698879 100644 --- a/pyghmi/redfish/oem/lenovo/xcc.py +++ b/pyghmi/redfish/oem/lenovo/xcc.py @@ -567,6 +567,9 @@ class OEMHandler(generic.OEMHandler): url = '/api/function/raid_conf?params=raidlink_GetDefaultVolProp' args = (url, cid, 0, params['drives']) props = self.wc.grab_json_response(','.join([str(x) for x in args])) + if not props: # newer firmwarerequires raidlevel too + args = (url, cid, params['raidlevel'], 0, params['drives']) + props = self.wc.grab_json_response(','.join([str(x) for x in args])) props = props['items'][0] volumes = pool.volumes remainingcap = params['capacity'] @@ -638,14 +641,21 @@ class OEMHandler(generic.OEMHandler): parms = {'raidlink_AddNewVolWithNaAsync': arglist} rsp = self.wc.grab_json_response(url, parms) if rsp['return'] == 14: # newer firmware - if cid[2] == 2: - cnum = cid[1] - arglist = '{0},{1},{2},{3},{4},{5},'.format( + arglist = '{0},{1},{2},{3},{4},{5},{6},'.format( cnum, params['raidlevel'], params['spans'], - params['perspan'], params['drives'], params['hotspares']) - arglist += ''.join(vols) + ',{0}'.format(cid[2]) + params['perspan'], 0, params['drives'], params['hotspares']) + arglist += ''.join(vols) parms = {'raidlink_AddNewVolWithNaAsync': arglist} rsp = self.wc.grab_json_response(url, parms) + if not rsp: # Purley + if cid[2] == 2: + cnum = cid[1] + arglist = '{0},{1},{2},{3},{4},{5},'.format( + cnum, params['raidlevel'], params['spans'], + params['perspan'], params['drives'], params['hotspares']) + arglist += ''.join(vols) + ',{0}'.format(cid[2]) + parms = {'raidlink_AddNewVolWithNaAsync': arglist} + rsp = self.wc.grab_json_response(url, parms) if rsp['return'] != 0: raise Exception( 'Unexpected response to add volume command: ' + repr(rsp))