bmcmanager tool - CloudEng Team fork
Project description
BMCManager
Introduction
bmcmanager
is a tool for performing operations on rack units. It originated as a rackops
fork, but has since been re-written almost from scratch, offering lots of additional functionality, bug-fixes and all-around improvements.
bmcmanager
supports Lenovo, Dell and Fujitsu servers, and relies on NetBox
for DCIM and IPAM.
bmcmanager
is released under the terms of the GPL-3.0 license.
Features
bmcmanager
features include and our not limited to:
- Manage SEL and IPMI sensor readings.
- Get information for system RAM, disks, power status.
- IPMI management commands (power on, power off, power cycle, reset and more).
- Check for latest firmware versions and perform firmware upgrades.
- Nagios/Icinga compatible IPMI server checks (sensors, logs, disks, and more).
- Open console (requires JavaWS).
- Manage NetBox secrets.
- Configure unique IPMI credentials per server, store them as NetBox secrets and retrieve them automatically from NetBox.
- Bash auto-completion.
- Supports multiple output formats supported.
Installation
Pip
-
Install dependencies:
# For Ubuntu/Debian $ sudo apt-get install freeipmi ipmitool icedtea-netx # For CentOS/Fedora $ sudo yum install freeipmi ipmitool icedtea-web
-
(Optional) Install
osput
for Lenovo firmware upgrades.# For CentOS/Fedora: $ wget https://download.lenovo.com/pccbbs/thinkservers/osput_1.3.2.zip $ unzip osput_1.3.2.zip $ yum install -y OSPUT-1.3.2/osput-1.3.2-1-rhel.x86_64.rpm
-
Install
bmcmanager
:$ git clone https://github.com/grnet/bmcmanager.git $ cd bmcmanager $ pip3 install . $ bmcmanager --help
Snap
- You can install
bmcmanager
as a snap package:$ sudo snap install bmcmanager
Snap Limitations:
- The snap package is installed with
strict
confinement, so it is not allowed to read your files. If you want to use a config file, you need to put it under theSNAP_COMMON
directory, which typically is/var/snap/bmcmanager/common
. - The snap package does not contain JavaWS, so opening a console is not possible.
Docker Image
- Development and Release Docker images for
bmcmanager
are available at DockerHub:$ docker pull cloudeng/bmcmanager $ docker run --rm -it --entrypoint bash cloudeng/bmcmanager > bmcmanager --help
Docker Limitations:
- The docker image does not contain JavaWS, so opening a console is not possible.
Configuration
bmcmanager
uses a single configuration file. It looks in ~/.config/bmcmanager
and $XDG_CONFIG_HOME/bmcmanager
by default, but a different configuration file can be chosen by setting the --config-file
command line argument.
The configuration file should have this form:
;; Configuration of "netbox" DCIM
[netbox]
; Required
api_url = <netbox_api_url>
; [Optional] Limit bmcmanager to query for certain device types only.
device_type_ids = <id1>, <id2>, ...
; Only if using NetBox secrets for IPMI credentials
netbox_token = <netbox_api_token>
session_key = <netbox_session_key>
; [Optional] Timeout when connecting to NetBox (in seconds).
timeout = 10
;; Configuration of "lenovo" OOB
[lenovo]
; IPMI credentials
username = <username>
password = <password>
; Use secret with role <secret_role> as IPMI credentials. Secret name will
; be used as username, secret plaintext will be used as password. You need to
; set `netbox_token` and `session_key` above for this to work.
; If no secret is available, then `username` and `password` defined above will
; be used instead.
credentials = <secret_role>
; [optional] Configure NFS share and HTTP share (used by some commands)
nfs_share = "IP:/path/"
http_share = "http://IP/path/"
; [optional] Latest firmware versions to check against
; Used by the `bmcmanager firmware check` command
bios = <MAJOR.MINOR.PATCH>
tsm = <MAJOR.MINOR.PATCH>
psu_<model> = <MAJOR.MINOR.PATCH>
; [optional] Number of PSUs to expect per server
; Used by the `bmcmanager firmware check` command
expected_psus = 2
Some configuration can be overriden using environment variables:
BMCMANAGER_USERNAME
BMCMANAGER_PASSWORD
BMCMANAGER_NFS_SHARE
BMCMANAGER_HTTP_SHARE
Examples
-
Retrieve the system event log for server
lar0510
:$ bmcmanager ipmi logs get lar0510 $ bmcmanager ipmi logs get lar0510 --analysed # Decode OEM fields
-
Clear the system event log for server
lar0510
:$ bmcmanager ipmi logs clear lar0510
-
Nagios check for IPMI sensor readings:
$ bmcmanager ipmi sensor check lar0510
-
Get information for disks attached to server:
$ bmcmanager disks get lar0510
-
Get latest firmware versions for
thinkserver-rd550
servers, and download firmware bundles in/opt/firmware-bundles
:$ bmcmanager firmware latest thinkserver-rd550 --download-to /opt/firmware-bundles
-
Get firmware version for a server:
$ bmcmanager firmware get lar0510 $ bmcmanager firmware get lar0510 -f json
-
Perform a BIOS firmware upgrade using the
bios-v495.bdl
file:$ bmcmanager firmware upgrade rpc lar0510 --bundle bios-v495.bdl
-
Open JavaWS console:
$ bmcmanager open console lar0510
-
Power cycle server:
$ bmcmanager power cycle lar0510
-
Connect to BMC using SSH:
$ bmcmanager ipmi ssh lar0510
-
Change IPMI password and store in a NetBox secret with role
MY_SECRET_ROLE
. In the config file, setcredentials = MY_SECRET_ROLE
so thatbmcmanager
will use that automatically:$ export BMCMANAGER_USERNAME="DEFAULT_USER" $ export BMCMANAGER_PASSWORD="DEFAULT_PASS" $ bmcmanager ipmi credentials set lar0510 --new-password "NEW_PASSWORD" --secret-role "MY_SECRET_ROLE" $ bmcmanager ipmi credentials get lar0510
Usage
Use bmcmanager --help
for a list of available commands. Common command-line arguments for all supported commands are:
Parameter | Type | Description |
---|---|---|
--config-file FILE |
String | Read configuration from FILE |
--log-file FILE |
String | Write detailed logs to FILE |
--verbose |
Flag | Print verbose details. NOTE: This may include sensitive information, like passwords |
Most bmcmanager
commands have the following format:
$ bmcmanager <command-name> <server-name>
bmcmanager
searches NetBox using <server-name>
as query string and executes the command for all matching devices.
The server selection arguments are:
Parameter | Type | Default | Description |
---|---|---|---|
<server-name> |
String | - | Search NetBox for <server-name> and execute command on all matching devices |
-d/--dcim DCIM |
String | netbox |
Use a different DCIM . Requires a separate [DCIM] section on the configuration file |
-t/--type TYPE |
name /rack /rack-unit /serial |
name |
Specifically match a rack, a rack unit, a serial number, or search by name |
Also use the --help
flag to get more information for a particular command, e.g.:
$ bmcmanager ipmi logs get --help
Auto-completion
The bmcmanager complete
generates a bash auto-completion script. You can use it directly:
$ . <(bmcmanager complete)
$ bmcmanager # pressing tab should show available commands
Or add the auto-completion script under /etc/bash_completion.d/bmcmanager
, so that it is loaded automatically by bash
:
$ echo ". <($(which bmcmanager) complete)" | sudo tee /etc/bash_completion.d/bmcmanager
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for bmcmanager-1.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d02be850f69ac2d41f3ad3af32d32f486d0d07ef7af83d4096c6a481ad803690 |
|
MD5 | 93bdf1490e343fe5e2ea8688ccc5943b |
|
BLAKE2b-256 | 2afc2f78ccb069348ff181ce485cf549a4be91027bc9cd6aaa3fdc9f6e3c4426 |