1#!/usr/bin/env python 2 3r""" 4Using python based redfish library. 5Refer: https://github.com/DMTF/python-redfish-library 6""" 7 8import redfish 9from robot.libraries.BuiltIn import BuiltIn 10 11 12class HTTPSBadRequestError(Exception): 13 r""" 14 BMC redfish generic raised method for error(s). 15 """ 16 pass 17 18 19class bmc_redfish(object): 20 21 ROBOT_LIBRARY_SCOPE = "TEST SUITE" 22 ROBOT_EXIT_ON_FAILURE = True 23 24 def __init__(self, hostname, username, password, *args, **kwargs): 25 r""" 26 Establish session connection to host. 27 28 Description of argument(s): 29 hostname The host name or IP address of the server. 30 username The username to be used to connect to the server. 31 password The password to be used to connect to the server. 32 args/kwargs Additional parms which are passed directly 33 to the redfish_client function. 34 """ 35 self._base_url_ = "https://" + hostname 36 self._username_ = username 37 self._password_ = password 38 self._default_prefix_ = "/redfish/v1" 39 40 def __enter__(self): 41 return self 42 43 def __del__(self): 44 del self 45 46 def login(self, *args, **kwargs): 47 r""" 48 Call the corresponding RestClientBase method and return the result. 49 50 Description of argument(s): 51 args/kwargs These are passed directly to the corresponding 52 RestClientBase method. 53 """ 54 55 for arg in args: 56 hostname = self._base_url_.strip("https://") 57 # Class object constructor reinitialized. 58 self.__init__(hostname=hostname, 59 username=arg['username'], 60 password=arg['password']) 61 62 self._robj_ = redfish.redfish_client(base_url=self._base_url_, 63 username=self._username_, 64 password=self._password_, 65 default_prefix=self._default_prefix_) 66 self._robj_.login(auth=redfish.AuthMethod.SESSION) 67 self._session_location_ = self._robj_.get_session_location() 68 69 def get(self, resource_path, *args, **kwargs): 70 r""" 71 Perform a GET request and return response. 72 73 Description of argument(s): 74 resource_path URI resource absolute path (e.g. "/redfish/v1/Systems/1"). 75 args/kwargs These are passed directly to the corresponding 76 RestClientBase method. 77 """ 78 self._rest_response_ = self._robj_.get(resource_path, *args, **kwargs) 79 return self._rest_response_ 80 81 def post(self, resource_path, *args, **kwargs): 82 r""" 83 Perform a POST request. 84 85 Description of argument(s): 86 resource_path URI resource relative path 87 (e.g. "Systems/1/Actions/ComputerSystem.Reset"). 88 args/kwargs These are passed directly to the corresponding 89 RestClientBase method. 90 """ 91 self._rest_response_ = self._robj_.post('/redfish/v1/' + resource_path, 92 *args, **kwargs) 93 return self._rest_response_ 94 95 def patch(self, resource_path, *args, **kwargs): 96 r""" 97 Perform a POST request. 98 99 Description of argument(s): 100 resource_path URI resource relative path 101 args/kwargs These are passed directly to the corresponding 102 RestClientBase method. 103 """ 104 self._rest_response_ = self._robj_.patch('/redfish/v1/' + resource_path, 105 *args, **kwargs) 106 return self._rest_response_ 107 108 def put(self, resource_path, actions, attr_data): 109 r""" 110 Perform a PUT request. 111 112 Description of argument(s): 113 resource_path URI resource relative path. 114 args/kwargs These are passed directly to the corresponding 115 RestClientBase method. 116 """ 117 self._rest_response_ = self._robj_.put('/redfish/v1/' + resource_path, 118 *args, **kwargs) 119 return self._rest_response_ 120 121 def delete(self, resource_path): 122 r""" 123 Perform a DELETE request. 124 125 Description of argument(s): 126 resource_path URI resource absolute path 127 (e.g. "/redfish/v1/SessionService/Sessions/8d1a9wiiNL"). 128 """ 129 self._rest_response_ = self._robj_.delete(resource_path) 130 return self._rest_response_ 131 132 def logout(self): 133 r""" 134 Logout redfish connection session. 135 """ 136 self._robj_.logout() 137