Work on types.py

- Change ManagersCollection to not report a list by a dict.
  The managers_dict will contain index --> manager object, index is the
  redfish index as reported inside url
- Notice that Proliant firmware now uses EthernetInterfaces as specified
  by Redfish
- Bug to be reported :
  /redfish/v1/Managers/1/EthernetInterfaces/1 returns invalid content (not json)
- Revert some changes on " to ' as it can break json data. Example :
  return self.set_parameter_json('{"Boot": {"BootSourceOverrideTarget":
  "'+target+'"},{"BootSourceOverrideEnabled" : "'+enabled+'"}}')
This commit is contained in:
Uggla 2016-01-03 00:15:08 +01:00
parent 5f42022b64
commit 6c4bb1480a
2 changed files with 35 additions and 30 deletions

View File

@ -249,7 +249,10 @@ if __name__ == '__main__':
sys.stderr.write(str(e.advices)) sys.stderr.write(str(e.advices))
sys.exit(1) sys.exit(1)
print ('Redfish API version : %s \n' % remote_mgmt.get_api_version()) print('Redfish API version : %s \n' % remote_mgmt.get_api_version())
print('Managers information :\n')
# Main program # Main program
redfishclient_version = "redfish-client 0.1" redfishclient_version = "redfish-client 0.1"

View File

@ -193,17 +193,18 @@ class Managers(Base):
def __init__(self, url, connection_parameters): def __init__(self, url, connection_parameters):
super(Managers, self).__init__(url, connection_parameters) super(Managers, self).__init__(url, connection_parameters)
try: try:
# New proliant firmware now respects Redfish v1.00, so seems to correct below statement
# self.ethernet_interfaces_collection = EthernetInterfacesCollection( # TODO : better handle exception and if possible support old firmware ?
# self.get_link_url('EthernetInterfaces'),
# connection_parameters
# )
# Works on proliant, need to treat 095 vs 0.96 differences
self.ethernet_interfaces_collection = EthernetInterfacesCollection( self.ethernet_interfaces_collection = EthernetInterfacesCollection(
self.get_link_url('EthernetNICs'), self.get_link_url('EthernetInterfaces'),
connection_parameters connection_parameters
) )
# Works on proliant, need to treat 095 vs 0.96 differences
#self.ethernet_interfaces_collection = EthernetInterfacesCollection(
# self.get_link_url('EthernetNICs'),
# connection_parameters
# )
except: except:
pass pass
@ -227,9 +228,10 @@ class ManagersCollection(BaseCollection):
def __init__(self, url, connection_parameters): def __init__(self, url, connection_parameters):
'''Class constructor''' '''Class constructor'''
super(ManagersCollection, self).__init__(url, connection_parameters) super(ManagersCollection, self).__init__(url, connection_parameters)
self.managers_list = [] self.managers_dict = {}
for link in self.links: for link in self.links:
self.managers_list.append(Managers(link, connection_parameters)) index = re.search(r'Managers/(\w+)', link)
self.managers_dict[index.group(1)] = Managers(link, connection_parameters)
class Systems(Base): class Systems(Base):
@ -322,28 +324,28 @@ class Systems(Base):
'''Shotcut function to set boot source '''Shotcut function to set boot source
:param target: new boot source. Supported values: :param target: new boot source. Supported values:
'None', "None",
'Pxe', "Pxe",
'Floppy', "Floppy",
'Cd', "Cd",
'Usb', "Usb",
'Hdd', "Hdd",
'BiosSetup', "BiosSetup",
'Utilities', "Utilities",
'Diags', "Diags",
'UefiShell', "UefiShell",
'UefiTarget' "UefiTarget"
:param enabled: Supported values: :param enabled: Supported values:
'Disabled', "Disabled",
'Once', "Once",
'Continuous' "Continuous"
:returns: string -- http response of PATCH request :returns: string -- http response of PATCH request
''' '''
return self.set_parameter_json('{'Boot': {'BootSourceOverrideTarget': ''+target+''},{'BootSourceOverrideEnabled' : ''+enabled+''}}') return self.set_parameter_json('{"Boot": {"BootSourceOverrideTarget": "'+target+'"},{"BootSourceOverrideEnabled" : "'+enabled+'"}}')
class SystemsCollection(BaseCollection): class SystemsCollection(BaseCollection):
'''Class to manage redfish ManagersCollection data.''' '''Class to manage redfish SystemsCollection data.'''
def __init__(self, url, connection_parameters): def __init__(self, url, connection_parameters):
super(SystemsCollection, self).__init__(url, connection_parameters) super(SystemsCollection, self).__init__(url, connection_parameters)
@ -357,7 +359,7 @@ class Bios(Base):
'''Class to manage redfish Bios data.''' '''Class to manage redfish Bios data.'''
def __init__(self, url, connection_parameters): def __init__(self, url, connection_parameters):
super(Bios, self).__init__(url, connection_parameters) super(Bios, self).__init__(url, connection_parameters)
self.boot = Boot(re.findall('.+/Bios',url)[0]+'/Boot/Settings', connection_parameters) self.boot = Boot(re.findall('.+/Bios', url)[0] + '/Boot/Settings', connection_parameters)
class Boot(Base): class Boot(Base):
@ -373,8 +375,8 @@ class EthernetInterfacesCollection(BaseCollection):
self.ethernet_interfaces_list = [] self.ethernet_interfaces_list = []
# Url returned by the mock up is wrong /redfish/v1/Managers/EthernetInterfaces/1 returns a 404. # Url returned by the mock up is wrong /redfish/v1/Managers/EthernetInterfaces/1 returns a 404. --> this is not true anymore (2016/01/03)
# The correct one should be /redfish/v1/Managers/1/EthernetInterfaces/1 # The correct one should be /redfish/v1/Managers/1/EthernetInterfaces/1 --> correct by mockup return invalid content (not json)
# Check more than 1 hour for this bug.... grrr.... # Check more than 1 hour for this bug.... grrr....
for link in self.links: for link in self.links:
self.ethernet_interfaces_list.append(EthernetInterfaces(link, connection_parameters)) self.ethernet_interfaces_list.append(EthernetInterfaces(link, connection_parameters))