Skip to main content

kaytus-bmc-sdk

A Python SDK for managing Kaytus BMC servers via the Redfish API.

Tested Environment

Component Version
Hardware Kaytus KR2280-X3
BMC Firmware 4.35.00 (2026-02-12)
BIOS 04.03.00 (2026-01-29)
Redfish 1.18.0
Python 3.10+

Installation

pip install kaytus-bmc-sdk

Requirements: requests >= 2.28


Quick Start

from kaytus_sdk import KaytusClient

with KaytusClient("192.168.40.100", "admin", "password") as bmc:
    print(bmc.system.overview())
    print(bmc.system.fan_summary())
    print(bmc.network.summary())

Bulk Operations

Run any operation across a range of servers concurrently:

from kaytus_sdk import bulk_run, ip_range, bulk_summary

results = bulk_run(
    hosts     = ip_range("10.255.40", 100, 130),
    username  = "admin",
    password  = "password",
    operation = lambda c: c.system.overview(),
)
print(bulk_summary(results))

Modules

bmc.system

bmc.system.overview()               # Single-request health/status summary
bmc.system.power_state()            # "On" | "Off" | "PoweringOn" | "PoweringOff"
bmc.system.power_on()
bmc.system.power_off()
bmc.system.shutdown()               # GracefulShutdown
bmc.system.reboot()                 # GracefulRestart
bmc.system.force_reboot()
bmc.system.power_cycle()
bmc.system.power_summary()          # Watts, PSU details, efficiency
bmc.system.fan_summary()            # RPM and ratio% for all fans
bmc.system.fan_control_info()       # FanControlMode, SmartCooling config
bmc.system.temperature_summary()    # All temperature sensors with thresholds
bmc.system.set_fan_mode("Auto")     # "Auto" | "Manual"
bmc.system.set_fan_speed(40)        # Manual mode: 0-100%
bmc.system.set_cooling_mode("LowNoise")   # "LowNoise" | "HighPerformance" | "Custom"
bmc.system.set_cpu_temp_target(85)  # SmartCooling CPU target temperature (°C)
bmc.system.set_boot_source("Pxe", enabled="Once")
bmc.system.set_indicator_led("Lit") # "Lit" | "Off" | "Blinking"

bmc.network

bmc.network.summary()
bmc.network.set_hostname("server-01")
bmc.network.set_dns(["1.1.1.1", "8.8.8.8"])
bmc.network.set_hostname_and_dns("server-01", ["1.1.1.1", "8.8.8.8"])
bmc.network.set_static_ip("10.0.0.100", "255.255.255.0", "10.0.0.1")
bmc.network.enable_dhcp()
bmc.network.ntp_summary()
bmc.network.set_ntp("ntp1.example.com", "ntp2.example.com")
bmc.network.set_https_timeout(1800)
bmc.network.set_ipmi_enabled(True)

bmc.snmp

bmc.snmp.summary()
bmc.snmp.configure(
    v1_enable=False, v2_enable=True, v3_enable=False,
    read_community="public", write_community="private"
)
bmc.snmp.add_trap_server(0, "10.0.0.50", 162, version="V2C")
bmc.snmp.remove_trap_server(0)
bmc.snmp.test_trap()

bmc.syslog

bmc.syslog.summary()
bmc.syslog.set_server(0, "10.0.0.50", 514,
    protocol="UDP",         # "UDP" | "TCP" | "TLS"
    log_type="Audit+IDL",   # "SEL" | "IDL" | "Audit" | combinations
    severity="Warning"      # "Critical" | "Warning" | "Info"
)
bmc.syslog.disable_server(0)
bmc.syslog.test()

bmc.logs

bmc.logs.sel(limit=50)          # System Event Log
bmc.logs.idl()                   # Intelligent Diagnose Log
bmc.logs.audit()                 # Audit log (config changes, logins)
bmc.logs.alarms()                # Active alarms
bmc.logs.all_logs()              # All services at once
bmc.logs.sel_summary()           # Count by severity
bmc.logs.recent_sel(10)
bmc.logs.recent_audit(20)
bmc.logs.search_idl("PSU")
bmc.logs.clear("SEL")           # "SEL" | "IDL" | "AuditLog"

bmc.accounts

bmc.accounts.summary()
bmc.accounts.create("ops", "SecurePass1!", role="Operator")
bmc.accounts.set_password("3", "NewPass!")
bmc.accounts.set_role("3", "ReadOnly")
bmc.accounts.set_enabled("3", False)
bmc.accounts.delete("3")

bmc.hardware

bmc.hardware.cpu_summary()      # Model, cores, threads, live MHz, TDP, cache, microcode
bmc.hardware.memory_summary()   # Populated DIMMs: capacity, type, speed, manufacturer
bmc.hardware.memory_total_gib()
bmc.hardware.nic_adapters()     # Network adapter cards
bmc.hardware.nic_ports("outboardPCIeCard25")
bmc.hardware.pcie_devices()     # All PCIe devices
bmc.hardware.boards()           # Chassis boards / FRU data

bmc.virtualmedia

Requires: pip install 'kaytus-bmc-sdk[virtualmedia]' (or pip install websockets>=14)

# One-shot: set boot source, reboot, and stream ISO until boot completes
bmc.virtualmedia.boot_cd("/path/to/proxmox-ve_9.2-1.iso")

# Step-by-step:
bmc.virtualmedia.set_boot_cd()              # set boot override → CD (Once, UEFI)
bmc.system.force_reboot()
bmc.virtualmedia.stream("/path/to/file.iso") # blocks until BMC disconnects

# Options:
bmc.virtualmedia.set_boot_cd(enabled="Continuous", mode="Legacy")
bmc.virtualmedia.boot_cd("/path/to/file.iso", boot_mode="Legacy", graceful=True)

bmc.bios

bmc.bios.version()
bmc.bios.info()
bmc.bios.set_attributes({"AttributeName": "Value"})
bmc.bios.reset_to_defaults()
bmc.bios.switch_active_bios("Bios-0")   # Dual BIOS slot switch
bmc.bios.export_config()

bmc.firmware

bmc.firmware.summary()          # All components: FanCPLD, PSU, VR, BIOS, BMC, CPLD
bmc.firmware.bmc_version()
bmc.firmware.bios_version()
bmc.firmware.tftp_update("tftp://10.0.0.1/bmc.bin")
bmc.firmware.update_status("task-id")

Error Handling

from kaytus_sdk import (
    KaytusAuthError,
    KaytusConnectionError,
    KaytusHTTPError,
    KaytusETagError,
    KaytusNotFoundError,
)

try:
    with KaytusClient("192.168.40.100", "admin", "password") as bmc:
        bmc.system.overview()
except KaytusConnectionError:
    print("Host unreachable or timed out")
except KaytusAuthError:
    print("Invalid credentials")
except KaytusHTTPError as e:
    print(f"HTTP error: {e.status_code}")

Notes

  • All PATCH operations are ETag-aware. The client handles ETag retrieval and stale-ETag retries automatically.
  • Some BMC firmware versions return HTTP 400 for successful PATCH/POST operations. The SDK detects and handles this known firmware behaviour.
  • SSL certificate verification is disabled by default (verify_ssl=False). Pass verify_ssl=True to enforce it.

License

MIT


Acknowledgements

Special thanks to Muhammed Musa Güngör — our Infrastructure Hero — for providing hardware access, testing support, and keeping the servers running throughout the development and validation of this SDK.

Special thanks to Serdar Sarıkaya for valuable support and contributions during the development and testing of this SDK.


Contributing

Pull requests are welcome. Please test changes against a real Kaytus BMC before submitting.

Release files for kaytus-bmc-sdk 2.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for kaytus-bmc-sdk 2.2.0
File Size Uploaded
kaytus_bmc_sdk-2.2.0.tar.gz 112.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for kaytus-bmc-sdk 2.2.0
File Interpreter ABI Platform
kaytus_bmc_sdk-2.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 145.7 kB

Release files / kaytus_bmc_sdk-2.2.0.tar.gz

Download URL kaytus_bmc_sdk-2.2.0.tar.gz
Size 112.0 kB
Tags Source
SHA-256 checksum
How to use checksums
18447db99f5ca92b16f07a81bac09bce4630ad8b6cc8597e8131e60477919507
BLAKE2b-256 checksum
How to use checksums
2823d5a183ad90ffef37c27bdd6aaca85665716d5520f1afbc7a0c92a9d6cf81
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release files / kaytus_bmc_sdk-2.2.0-py3-none-any.whl

Download URL kaytus_bmc_sdk-2.2.0-py3-none-any.whl
Size 33.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3d51d7533145effb209e727d0927cd721e494f8c75f7d0951df0d37104b2e56c
BLAKE2b-256 checksum
How to use checksums
a7f7b55ec04c371c90fa21cd7d14c4c149db0ca8a070b6cec6a25bab9a9ed83e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

2.2.0 This release

2 release files

2.1.0

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page