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_key_ = self._robj_.get_session_key() 68 self._session_location_ = self._robj_.get_session_location() 69 70 def set_session_key(self, session_key): 71 r""" 72 Update the session key instance. 73 74 session_key Redfish valid session key. 75 """ 76 self._robj_.set_session_key(session_key) 77 78 def set_session_location(self, session_location): 79 r""" 80 Update the session location instance. 81 82 session_location Redfish valid session location. 83 Example: 84 /redfish/v1/SessionService/Sessions/j04tD83QQn 85 """ 86 self._robj_.set_session_location(session_location) 87 88 def get(self, resource_path, *args, **kwargs): 89 r""" 90 Perform a GET request and return response. 91 92 Description of argument(s): 93 resource_path URI resource absolute path (e.g. "/redfish/v1/Systems/1"). 94 args/kwargs These are passed directly to the corresponding 95 RestClientBase method. 96 """ 97 self._rest_response_ = self._robj_.get(resource_path, *args, **kwargs) 98 return self._rest_response_ 99 100 def post(self, resource_path, *args, **kwargs): 101 r""" 102 Perform a POST request. 103 104 Description of argument(s): 105 resource_path URI resource relative path 106 (e.g. "Systems/1/Actions/ComputerSystem.Reset"). 107 args/kwargs These are passed directly to the corresponding 108 RestClientBase method. 109 """ 110 self._rest_response_ = self._robj_.post(resource_path, *args, **kwargs) 111 return self._rest_response_ 112 113 def patch(self, resource_path, *args, **kwargs): 114 r""" 115 Perform a POST request. 116 117 Description of argument(s): 118 resource_path URI resource relative path 119 args/kwargs These are passed directly to the corresponding 120 RestClientBase method. 121 """ 122 self._rest_response_ = self._robj_.patch(resource_path, *args, **kwargs) 123 return self._rest_response_ 124 125 def put(self, resource_path, actions, attr_data): 126 r""" 127 Perform a PUT request. 128 129 Description of argument(s): 130 resource_path URI resource relative path. 131 args/kwargs These are passed directly to the corresponding 132 RestClientBase method. 133 """ 134 self._rest_response_ = self._robj_.put(resource_path, *args, **kwargs) 135 return self._rest_response_ 136 137 def delete(self, resource_path): 138 r""" 139 Perform a DELETE request. 140 141 Description of argument(s): 142 resource_path URI resource absolute path 143 (e.g. "/redfish/v1/SessionService/Sessions/8d1a9wiiNL"). 144 """ 145 self._rest_response_ = self._robj_.delete(resource_path) 146 return self._rest_response_ 147 148 def logout(self): 149 r""" 150 Logout redfish connection session. 151 """ 152 self._robj_.logout() 153