mirror of
https://github.com/xcat2/xcat-core.git
synced 2025-06-01 19:17:06 +00:00
Merge pull request #5981 from xuweibj/I5969
fix issue 5969, handle power actions info format on 2.04
This commit is contained in:
commit
d83620397d
@ -54,6 +54,7 @@ BOOTSOURCE_GET_STATE = {
|
||||
manager_reset_string = '#Manager.Reset'
|
||||
system_reset_string = '#ComputerSystem.Reset'
|
||||
reset_type_string = 'ResetType@Redfish.AllowableValues'
|
||||
reset_action_string = '@Redfish.ActionInfo'
|
||||
|
||||
class RedfishRest(object):
|
||||
|
||||
@ -156,7 +157,7 @@ class RedfishRest(object):
|
||||
if 'Name' in data:
|
||||
self._print_record_log('%s %s' % (code, data['Name']), cmd)
|
||||
elif 'error' in data:
|
||||
self._print_record_log('%s %s' % (code, data['error']['Message']), cmd)
|
||||
self._print_record_log('%s %s' % (code, data['error']['message']), cmd)
|
||||
return data
|
||||
|
||||
def login(self):
|
||||
@ -207,9 +208,15 @@ class RedfishRest(object):
|
||||
members = self._get_members(MANAGER_URL)
|
||||
target_url = members[0]['@odata.id']
|
||||
data = self.request('GET', target_url, cmd='get_bmc_actions')
|
||||
|
||||
try:
|
||||
actions = data['Actions'][manager_reset_string][reset_type_string]
|
||||
target_url = data['Actions'][manager_reset_string]['target']
|
||||
actions_dict = data['Actions'][manager_reset_string]
|
||||
target_url = actions_dict['target']
|
||||
if reset_action_string in actions_dict:
|
||||
action_info = self.request('GET', actions_dict[reset_action_string], cmd='get_bmc_actions')
|
||||
actions = action_info['Parameters'][0]['AllowableValues']
|
||||
else:
|
||||
actions = actions_dict[reset_type_string]
|
||||
except KeyError as e:
|
||||
raise SelfServerException('Get KeyError %s' % e.args)
|
||||
|
||||
@ -229,9 +236,15 @@ class RedfishRest(object):
|
||||
members = self._get_members(SYSTEMS_URL)
|
||||
target_url = members[0]['@odata.id']
|
||||
data = self.request('GET', target_url, cmd='get_power_actions')
|
||||
|
||||
try:
|
||||
actions = data['Actions'][system_reset_string][reset_type_string]
|
||||
target_url = data['Actions'][system_reset_string]['target']
|
||||
actions_dict = data['Actions'][system_reset_string]
|
||||
target_url = actions_dict['target']
|
||||
if reset_action_string in actions_dict:
|
||||
action_info = self.request('GET', actions_dict[reset_action_string], cmd='get_power_actions')
|
||||
actions = action_info['Parameters'][0]['AllowableValues']
|
||||
else:
|
||||
actions = actions_dict[reset_type_string]
|
||||
except KeyError as e:
|
||||
raise SelfServerException('Get KeyError %s' % e.args)
|
||||
|
||||
|
@ -70,10 +70,7 @@
|
||||
"Actions": {
|
||||
"#Manager.Reset": {
|
||||
"target": "/redfish/v1/Managers/BMC/Actions/Manager.Reset",
|
||||
"ResetType@Redfish.AllowableValues": [
|
||||
"ForceRestart",
|
||||
"GracefulRestart"
|
||||
]
|
||||
"@Redfish.ActionInfo": "/redfish/v1/Managers/BMC/ResetActionInfo"
|
||||
}
|
||||
},
|
||||
"Oem": {
|
||||
|
@ -0,0 +1,93 @@
|
||||
{
|
||||
"@odata.context": "/redfish/v1/$metadata#Manager.Manager",
|
||||
"@odata.type": "#Manager.v1_5_0.Manager",
|
||||
"@odata.id": "/redfish/v1/Managers/BMC",
|
||||
"Id": "BMC",
|
||||
"Description": "Aspeed BMC",
|
||||
"Name": "Manager",
|
||||
"ManagerType": "BMC",
|
||||
"UUID": "006126AB-B608-E911-8000-0CC47AD55B4E",
|
||||
"Model": "P9DSU 9006-22P",
|
||||
"DateTime": "2019-01-22T06:22:55+00:00",
|
||||
"DateTimeLocalOffset": "+00:00",
|
||||
"FirmwareVersion": "2.04",
|
||||
"Status": {
|
||||
"State": "Enabled",
|
||||
"Health": "OK"
|
||||
},
|
||||
"PowerState": "On",
|
||||
"SerialConsole": {
|
||||
"ServiceEnabled": true,
|
||||
"MaxConcurrentSessions": 1,
|
||||
"ConnectTypesSupported": [
|
||||
"IPMI"
|
||||
]
|
||||
},
|
||||
"CommandShell": {
|
||||
"ServiceEnabled": true,
|
||||
"MaxConcurrentSessions": 0,
|
||||
"ConnectTypesSupported": [
|
||||
"SSH"
|
||||
]
|
||||
},
|
||||
"GraphicalConsole": {
|
||||
"ServiceEnabled": true,
|
||||
"MaxConcurrentSessions": 4,
|
||||
"ConnectTypesSupported": [
|
||||
"KVMIP"
|
||||
]
|
||||
},
|
||||
"EthernetInterfaces": {
|
||||
"@odata.id": "/redfish/v1/Managers/BMC/EthernetInterfaces"
|
||||
},
|
||||
"SerialInterfaces": {
|
||||
"@odata.id": "/redfish/v1/Managers/BMC/SerialInterfaces"
|
||||
},
|
||||
"NetworkProtocol": {
|
||||
"@odata.id": "/redfish/v1/Managers/BMC/NetworkProtocol"
|
||||
},
|
||||
"LogServices": {
|
||||
"@odata.id": "/redfish/v1/Managers/BMC/LogServices"
|
||||
},
|
||||
"VirtualMedia": {
|
||||
"@odata.id": "/redfish/v1/Managers/BMC/VirtualMedia"
|
||||
},
|
||||
"Links": {
|
||||
"ManagerForServers": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Systems/Computer"
|
||||
}
|
||||
],
|
||||
"ManagerForChassis": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Chassis/Planar"
|
||||
}
|
||||
],
|
||||
"ManagerInChassis": {
|
||||
"@odata.id": "/redfish/v1/Chassis/Planar"
|
||||
}
|
||||
},
|
||||
"Actions": {
|
||||
"#Manager.Reset": {
|
||||
"target": "/redfish/v1/Managers/BMC/Actions/Manager.Reset",
|
||||
"ResetType@Redfish.AllowableValues": [
|
||||
"ForceRestart",
|
||||
"GracefulRestart"
|
||||
]
|
||||
}
|
||||
},
|
||||
"Oem": {
|
||||
"Supermicro": {
|
||||
"@odata.type": "#SMCManager.v1_0_1.SMCManager",
|
||||
"FanMode": {
|
||||
"@odata.id": "/redfish/v1/Managers/BMC/Oem/Supermicro/FanMode"
|
||||
},
|
||||
"MouseMode": {
|
||||
"@odata.id": "/redfish/v1/Managers/BMC/Oem/Supermicro/MouseMode"
|
||||
},
|
||||
"SMTP": {
|
||||
"@odata.id": "/redfish/v1/Managers/BMC/Oem/Supermicro/SMTP"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
{
|
||||
"@odata.context": "/redfish/v1/$metadata#ActionInfo.ActionInfo",
|
||||
"@odata.type": "#ActionInfo.v1_1_0.ActionInfo",
|
||||
"@odata.id": "/redfish/v1/Systems/Computer/ResetActionInfo",
|
||||
"Id": "ResetActionInfo",
|
||||
"Name": "Reset Action Info",
|
||||
"Parameters": [
|
||||
{
|
||||
"Name": "ResetType",
|
||||
"Required": true,
|
||||
"DataType": "String",
|
||||
"AllowableValues": [
|
||||
"On",
|
||||
"ForceOff",
|
||||
"GracefulShutdown",
|
||||
"GracefulRestart",
|
||||
"ForceRestart",
|
||||
"ForceOn"
|
||||
]
|
||||
}
|
||||
],
|
||||
"Oem": {}
|
||||
}
|
@ -73,14 +73,7 @@
|
||||
"Actions": {
|
||||
"#ComputerSystem.Reset": {
|
||||
"target": "/redfish/v1/Systems/Computer/Actions/ComputerSystem.Reset",
|
||||
"ResetType@Redfish.AllowableValues": [
|
||||
"On",
|
||||
"ForceOff",
|
||||
"GracefulShutdown",
|
||||
"GracefulRestart",
|
||||
"ForceRestart",
|
||||
"ForceOn"
|
||||
]
|
||||
"@Redfish.ActionInfo": "/redfish/v1/Systems/Computer/ResetActionInfo"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,86 @@
|
||||
{
|
||||
"@odata.context": "/redfish/v1/$metadata#ComputerSystem.ComputerSystem",
|
||||
"@odata.type": "#ComputerSystem.v1_5_0.ComputerSystem",
|
||||
"@odata.id": "/redfish/v1/Systems/Computer",
|
||||
"Id": "Computer",
|
||||
"Name": "OpenPOWER Computer System",
|
||||
"Description": "OpenPOWER Computer System",
|
||||
"Status": {
|
||||
"State": "Enabled",
|
||||
"Health": "Critical"
|
||||
},
|
||||
"SerialNumber": "C829UAE15A10564",
|
||||
"PartNumber": "9006-22P",
|
||||
"Manufacturer": "IBM",
|
||||
"Model": "SYSTEM",
|
||||
"SystemType": "Physical",
|
||||
"BiosVersion": "2.04 20190118",
|
||||
"UUID": "00000000-0000-0000-0000-0000000000",
|
||||
"ProcessorSummary": {
|
||||
"Count": 2,
|
||||
"Model": "POWER CPU",
|
||||
"Status": {
|
||||
"State": "Enabled",
|
||||
"Health": "OK"
|
||||
}
|
||||
},
|
||||
"IndicatorLED": "Off",
|
||||
"PowerState": "On",
|
||||
"Boot": {
|
||||
"BootSourceOverrideMode": "Legacy",
|
||||
"BootSourceOverrideEnabled": "Once",
|
||||
"BootSourceOverrideTarget": "None",
|
||||
"BootSourceOverrideTarget@Redfish.AllowableValues": [
|
||||
"None",
|
||||
"Pxe",
|
||||
"Hdd",
|
||||
"Diags",
|
||||
"Cd",
|
||||
"BiosSetup",
|
||||
"Usb",
|
||||
"Floppy"
|
||||
]
|
||||
},
|
||||
"HostWatchdogTimer": {
|
||||
"FunctionEnabled": true,
|
||||
"WarningAction": "None",
|
||||
"WarningAction@Redfish.AllowableValues": [
|
||||
"None"
|
||||
],
|
||||
"TimeoutAction": "None",
|
||||
"TimeoutAction@Redfish.AllowableValues": [
|
||||
"None",
|
||||
"ResetSystem",
|
||||
"PowerDown",
|
||||
"PowerCycle"
|
||||
],
|
||||
"Status": {
|
||||
"State": "StandbyOffline"
|
||||
}
|
||||
},
|
||||
"Links": {
|
||||
"Chassis": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Chassis/chassis0"
|
||||
}
|
||||
],
|
||||
"ManagedBy": [
|
||||
{
|
||||
"@odata.id": "/redfish/v1/Managers/BMC"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Actions": {
|
||||
"#ComputerSystem.Reset": {
|
||||
"target": "/redfish/v1/Systems/Computer/Actions/ComputerSystem.Reset",
|
||||
"ResetType@Redfish.AllowableValues": [
|
||||
"On",
|
||||
"ForceOff",
|
||||
"GracefulShutdown",
|
||||
"GracefulRestart",
|
||||
"ForceRestart",
|
||||
"ForceOn"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
@ -1,15 +1,7 @@
|
||||
{
|
||||
"@odata.context":"/redfish/v1/$metadata#ChassisCollection.ChassisCollection",
|
||||
"@odata.type":"#ChassisCollection.ChassisCollection",
|
||||
"@odata.id":"/redfish/v1/Chassis",
|
||||
"error":{
|
||||
"Message": "Chassis Collection"
|
||||
},
|
||||
"Description":"Chassis Collection",
|
||||
"Members":[
|
||||
{
|
||||
"@odata.id":"/redfish/v1/Chassis/Planar"
|
||||
}
|
||||
],
|
||||
"Members@odata.count":1
|
||||
"error":
|
||||
{
|
||||
"message": "Successfully Completed Request",
|
||||
"code": "Base.1.4.0.Success"
|
||||
}
|
||||
}
|
||||
|
@ -222,15 +222,24 @@ class TestRedfishClient(object):
|
||||
self.rf_rest._get_members = mock.Mock(return_value=[ {"@odata.id": self.manager_url + '/BMC'} ])
|
||||
with open("%s/manager_rsp.json" % DATA_DIR,'r') as load_f:
|
||||
rsp = json.load(load_f)
|
||||
with open("%s/bmc_action_rsp.json" % DATA_DIR,'r') as load_f:
|
||||
actioninfo = json.load(load_f)
|
||||
self.rf_rest.request = mock.Mock(side_effect=[rsp, actioninfo])
|
||||
reset_string = '#Manager.Reset'
|
||||
assert self.rf_rest._get_bmc_actions() == (rsp['Actions'][reset_string]['target'], actioninfo['Parameters'][0]['AllowableValues'])
|
||||
|
||||
def test__get_bmc_actions_v123(self):
|
||||
self.rf_rest._get_members = mock.Mock(return_value=[ {"@odata.id": self.manager_url + '/BMC'} ])
|
||||
with open("%s/manager_rsp_v123.json" % DATA_DIR,'r') as load_f:
|
||||
rsp = json.load(load_f)
|
||||
self.rf_rest.request = mock.Mock(return_value=rsp)
|
||||
reset_string = '#Manager.Reset'
|
||||
assert self.rf_rest._get_bmc_actions() == (rsp['Actions'][reset_string]['target'], rsp['Actions'][reset_string]['ResetType@Redfish.AllowableValues'])
|
||||
assert self.rf_rest._get_bmc_actions() == (rsp['Actions'][reset_string]['target'], rsp['Actions'][reset_string]['ResetType@Redfish.AllowableValues'])
|
||||
|
||||
def test__get_bmc_actions_keyerror(self):
|
||||
self.rf_rest._get_members = mock.Mock(return_value=[ {"@odata.id": self.manager_url + '/BMC'} ])
|
||||
with open("%s/manager_rsp.json" % DATA_DIR,'r') as load_f:
|
||||
rsp = json.load(load_f)
|
||||
del rsp['Actions']['#Manager.Reset']['ResetType@Redfish.AllowableValues']
|
||||
self.rf_rest.request = mock.Mock(return_value=rsp)
|
||||
with pytest.raises(SelfServerException) as excinfo:
|
||||
self.rf_rest._get_bmc_actions()
|
||||
@ -256,6 +265,16 @@ class TestRedfishClient(object):
|
||||
self.rf_rest._get_members = mock.Mock(return_value=[ {"@odata.id": self.systems_url + '/Computer'} ])
|
||||
with open("%s/systems_rsp.json" % DATA_DIR,'r') as load_f:
|
||||
rsp = json.load(load_f)
|
||||
with open("%s/system_action_rsp.json" % DATA_DIR,'r') as load_f:
|
||||
actioninfo = json.load(load_f)
|
||||
self.rf_rest.request = mock.Mock(side_effect=[rsp, actioninfo])
|
||||
reset_string = '#ComputerSystem.Reset'
|
||||
assert self.rf_rest._get_power_actions() == (rsp['Actions'][reset_string]['target'], actioninfo['Parameters'][0]['AllowableValues'])
|
||||
|
||||
def test__get_power_actions_v123(self):
|
||||
self.rf_rest._get_members = mock.Mock(return_value=[ {"@odata.id": self.systems_url + '/Computer'} ])
|
||||
with open("%s/systems_rsp_v123.json" % DATA_DIR,'r') as load_f:
|
||||
rsp = json.load(load_f)
|
||||
self.rf_rest.request = mock.Mock(return_value=rsp)
|
||||
reset_string = '#ComputerSystem.Reset'
|
||||
assert self.rf_rest._get_power_actions() == (rsp['Actions'][reset_string]['target'], rsp['Actions'][reset_string]['ResetType@Redfish.AllowableValues'])
|
||||
@ -264,7 +283,6 @@ class TestRedfishClient(object):
|
||||
self.rf_rest._get_members = mock.Mock(return_value=[ {"@odata.id": self.systems_url + '/Computer'} ])
|
||||
with open("%s/systems_rsp.json" % DATA_DIR,'r') as load_f:
|
||||
rsp = json.load(load_f)
|
||||
del rsp['Actions']['#ComputerSystem.Reset']['target']
|
||||
self.rf_rest.request = mock.Mock(return_value=rsp)
|
||||
with pytest.raises(SelfServerException) as excinfo:
|
||||
self.rf_rest._get_power_actions()
|
||||
@ -274,8 +292,10 @@ class TestRedfishClient(object):
|
||||
def test_set_power_state(self):
|
||||
with open("%s/systems_rsp.json" % DATA_DIR,'r') as load_f:
|
||||
rsp = json.load(load_f)
|
||||
with open("%s/system_action_rsp.json" % DATA_DIR,'r') as load_f:
|
||||
actioninfo = json.load(load_f)
|
||||
reset_string = '#ComputerSystem.Reset'
|
||||
self.rf_rest._get_power_actions = mock.Mock(return_value=(rsp['Actions'][reset_string]['target'], rsp['Actions'][reset_string]['ResetType@Redfish.AllowableValues']))
|
||||
self.rf_rest._get_power_actions = mock.Mock(return_value=(rsp['Actions'][reset_string]['target'], actioninfo['Parameters'][0]['AllowableValues']))
|
||||
self.rf_rest.request = mock.Mock(return_value=None)
|
||||
assert self.rf_rest.set_power_state('on') == None
|
||||
assert self.rf_rest.request
|
||||
|
Loading…
x
Reference in New Issue
Block a user