Using a trial and error method to determine the format of AddNewVolWithNaAsync causes issues on some server models. When repeatedly deleting and creating the RAID array on Cyborg with CDI3A2U XCC firmware we occasionally see hanged web sessions and on rare occasions an incorrectly formatted AddNewVolWithNaAsync call will return success and not create the array. To reduce the number of AddNewVolWithNaAsync calls we determine when GetDefaultVolProp requires the extra controller slot number argument and in this case we directly use the AddNewVolWithNaAsync call with the extra controller type argument as these 2 changes go hand in hand in the XCC firmware. This logic reduces the amount of AddNewVolWithNaAsync calls by one and the issues described above can no longer be observed. Change-Id: Icdaa5ef0fb5629ad965e37cbbecdcf892f6e315f
pyghmi
Pyghmi is a pure Python (mostly IPMI) server management library.
Building and installing
(These instructions have been tested on CentOS 7)
Clone the repository, generate the RPM and install it:
$ git clone https://github.com/openstack/pyghmi.git
$ cd pyghmi/
$ python setup.py bdist_rpm
$ sudo rpm -ivh dist/pyghmi-*.noarch.rpm
Using
There are a few use examples in the bin
folder:
fakebmc
: simply fakes a BMC that supports a few IPMI commands (useful for testing)pyghmicons
: a remote console based on SOL redirection over IPMIpyghmiutil
: an IPMI client that supports a few direct uses of pyghmi (also useful for testing and prototyping new features)virshbmc
: a BMC emulation wrapper using libvirt
Extending
If you plan on adding support for new features, you'll most likely be interested
in adding your methods to pyghmi/ipmi/command.py
. See methods such as
get_users
and set_power
for examples of how to use internal mechanisms to
implement new features. And please, always document new methods.
Sometimes you may want to implement OEM-specific code. For example, retrieving firmware version information is not a part of standard IPMI, but some servers are known to support it via custom OEM commands. If this is the case, follow these steps:
- Add your generic retrieval function (stub) to the
OEMHandler
class inpyghmi/ipmi/oem/generic.py
. And please, document its intent, parameters and expected return values. - Implement the specific methods that your server supports in subdirectories in
the
oem
folder (consider thelenovo
submodule as an example). A OEM folder will contain at least one class inheriting fromOEMHandler
, and optionally helpers for running and parsing custom OEM commands. - Register mapping policies in
pyghmi/ipmi/oem/lookup.py
so pyghmi knows how to associate a BMC session with the specific OEM code you implemented.
A good way of testing the new feature is using bin/pyghmiutil
. Just add an
extension for the new feature you just implemented (as a new command) and call
it from the command line:
$ IPMIPASSWORD=passw0rd bin/pyghmiutil [BMC IP address] username my_new_feature_command