Contents
As of version 3.0.0, Python2 is no longer supported. If Python2 is required, redfish<3.0.0
can be specified in a requirements file.
REST (Representational State Transfer) is a web based software architectural style consisting of a set of constraints that focuses on a system's resources. The Redfish library performs GET, POST, PUT, PATCH and DELETE HTTP operations on resources within a Redfish service. Go to the wiki for more details.
pip install redfish
python setup.py sdist --formats=zip (this will produce a .zip file)
cd dist
pip install redfish-x.x.x.zip
Ensure the system does not have the OpenStack "python-redfish" module installed on the target system. This module is using a conflicting package name that this library already uses. The module in question can be found here: https://pypi.org/project/python-redfish/
A set of examples is provided under the examples directory of this project. In addition to the directives present in this paragraph, you will find valuable implementation tips and tricks in those examples.
For a Redfish conformant application import the relevant Python module.
For Redfish conformant application:
import redfish
The Redfish object contains three required parameters:
base_url
: The address of the Redfish service (with scheme). Example:https://192.168.1.100
. For Unix sockets, use the schemehttp+unix://
, followed by the percent-encoded filepath to the socket.username
: The username for authentication.password
: The password for authentication.
There are several optional parameters:
default_prefix
: The path to the Redfish service root. This is only used for initial connection and authentication with the service. The default value is/redfish/v1/
.sessionkey
: The session key to use with subsequent requests. This can be used to bypass the login step. The default value isNone
.cafile
: The file path to the CA certificate that issued the Redfish service's certificate. The default value isNone
.timeout
: The number of seconds to wait for a response before closing the connection. The default value isNone
.max_retry
: The number of retries to perform an operation before giving up. The default value is10
.
To crete a Redfish object, call the redfish_client
method:
REDFISH_OBJ = redfish.redfish_client(base_url=login_host, username=login_account, \
password=login_password, default_prefix='/redfish/v1/')
After creating the REDFISH_OBJ, perform the login
operation to authenticate with the service. The auth
parameter allows you to specify the login method. Possible values are:
session
: Creates a Redfish session with a session token.basic
: Uses HTTP Basic authentication for all requests.
REDFISH_OBJ.login(auth="session")
A simple GET operation can be performed to obtain the data present in any valid path. An example of GET operation on the path "/redfish/v1/systems/1" is shown below:
response = REDFISH_OBJ.get("/redfish/v1/systems/1", None)
A POST operation can be performed to create a resource or perform an action. An example of a POST operation on the path "/redfish/v1/systems/1/Actions/ComputerSystem.Reset" is shown below:
body = {"ResetType": "GracefulShutdown"}
response = REDFISH_OBJ.post("/redfish/v1/systems/1/Actions/ComputerSystem.Reset", body=body)
A POST and PATCH operations may result in a task, describing an operation with a duration greater than the span of a single request.
The action message object that is_processing
will return a task that can be accessed reviewed when polled with monitor.
An example of a POST operation with a possible task is shown below.
body = {"ResetType": "GracefulShutdown"}
response = REDFISH_OBJ.post("/redfish/v1/systems/1/Actions/ComputerSystem.Reset", body=body)
if(response.is_processing):
task = response.monitor(context)
while(task.is_processing):
retry_time = task.retry_after
task_status = task.dict['TaskState']
time.sleep(retry_time if retry_time else 5)
task = response.monitor(context)
Ensure you perform a logout
operation when done interacting with the Redfish service. If this step isn't performed, the session will remain active until the Redfish service decides to close it.
REDFISH_OBJ.logout()
The logout
operation deletes the current sesssion from the service. The redfish_client
object destructor includes a logout statement.
You can use a proxy by specifying the HTTP_PROXY
and HTTPS_PROXY
environment variables. Hosts to be excluded from the proxy can be specified using the NO_PROXY environment variable.
export HTTP_PROXY="http://192.168.1.10:8888"
export HTTPS_PROXY="http://192.168.1.10:8888"
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -s -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request :D
Run the release.sh
script to publish a new version.
sh release.sh <NewVersion>
Enter the release notes when prompted; an empty line signifies no more notes to add.
Copyright Notice: Copyright 2016-2022 DMTF. All rights reserved. License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/python-redfish-library/blob/master/LICENSE.md