Python 3.6+ modules for Linuxfabrik projects: DB access, SQLite KVS caching, WinRM, SMB, shell execution, 15+ API integrations (Icinga2, Veeam, Nextcloud, ...). Available on PyPI. • made by Linuxfabrik
A mature, production-grade Python library collection providing 35+ modules with 300+ functions for system administration, monitoring, and infrastructure automation. These libraries are used across several Linuxfabrik projects -- most prominently the Linuxfabrik Monitoring Plugins (Nagios/Icinga check plugins), but also in ChecklistFabrik and other tools.
The library requires Python 3.6+ (the default Python version on RHEL 8) and runs on every platform.
pip install linuxfabrik-libFull API documentation is available at linuxfabrik.github.io/lib (generated with pdoc).
These libraries are built with a clear set of priorities:
- Broad compatibility. Python 3.6+ is the minimum, ensuring the libraries work on RHEL 8 and every major distribution without requiring newer runtimes.
- Cross-platform. Core functions behave identically on Linux, Windows, and macOS. Platform-specific code (WinRM, PowerShell, SMB) is cleanly separated.
- Minimal dependencies. We avoid pulling in large dependency trees. External packages are used only when the alternative would be unreliable or significantly more complex.
- Consistent error handling. Most functions return
(success, result)tuples. The caller decides whether to continue or exit -- the library never exits on its own. Thebase.coe()("Continue or Exit") helper makes this pattern concise. - Automatic redaction. Sensitive data (passwords, tokens, API keys) in error messages is automatically sanitized before output.
- Nagios/Icinga conventions. State constants, threshold evaluation, performance data formatting, and range parsing follow the Monitoring Plugins Development Guidelines.
- Defensive defaults. Functions use sensible timeouts, safe SSL settings, and locked-down defaults so that plugins work out of the box without extensive configuration.
| Module | Description | Key Functions |
|---|---|---|
| args.py | Extends argparse with custom input types for monitoring thresholds and common parameters. |
csv(), float_or_none(), int_or_none(), number_unit_method() |
| base.py | The central library for plugin development. Provides state evaluation, threshold comparison, performance data formatting, ASCII table output, and the coe() error-handling pattern. |
coe(), get_perfdata(), get_state(), get_table(), get_worst(), match_range(), oao(), state2str() |
| globals.py | Defines the four Nagios/Icinga plugin states: STATE_OK (0), STATE_WARN (1), STATE_CRIT (2), STATE_UNKNOWN (3). |
-- |
| human.py | Converts raw numbers and durations to human-readable representations and back. Supports binary/SI prefixes and Nagios range syntax with units. | bytes2human(), human2bytes(), seconds2human(), human2seconds(), number2human() |
| lftest.py | Test harness for running plugin unit tests against expected STDOUT/STDERR output files. | test() |
| time.py | Date/time conversions between UNIX epochs, ISO strings, datetime objects, and weekday names. Timezone-aware. | epoch2iso(), now(), timestr2epoch(), timestrdiff(), utc_offset() |
| txt.py | Text processing: encoding conversion, regex compilation, substring extraction, multi-line parsing, sensitive data redaction, and pluralization. | sanitize_sensitive_data(), extract_str(), mltext2array(), to_text(), to_bytes() |
| version.py | Software version parsing, comparison, and End-of-Life checking against endoflife.date. | check_eol(), version(), version2float() |
| Module | Description | Key Functions |
|---|---|---|
| cache.py | A simple SQLite-based key-value store with optional key expiration. Used for persisting state between plugin runs. | get(), set() |
| db_mysql.py | MySQL/MariaDB client with connection management, query execution, and privilege checking. | connect(), select(), check_select_privileges() |
| db_sqlite.py | Full SQLite interface: table/index creation, CRUD operations, CSV import, regex support, and automatic load computation for time-series data. | connect(), select(), insert(), create_table(), compute_load(), import_csv() |
| Module | Description | Key Functions |
|---|---|---|
| disk.py | File I/O, directory walking, CSV/environment file parsing, partition listing, device-mapper resolution, and file ownership lookup. | read_file(), walk_directory(), grep_file(), read_csv(), get_real_disks() |
| distro.py | Linux distribution detection. Returns normalized facts including distribution name, version, and Ansible-compatible os_family. |
get_distribution_facts() |
| dmidecode.py | Parses dmidecode output into structured data. Extracts CPU, RAM, firmware, serial number, manufacturer, and model information. |
get_data(), cpu_type(), ram(), manufacturer(), model(), serno() |
| endoflifedate.py | Bundled End-of-Life data from endoflife.date for offline version checks when internet access is unavailable. | -- |
| psutil.py | Wrapper around psutil for retrieving mounted disk partitions with device, mount point, and filesystem type. |
get_partitions() |
| shell.py | Subprocess execution with pipeline support, regex filtering, configurable locale, and timeout handling. Works on Linux and Windows. | shell_exec(), get_command_output() |
| Module | Description | Key Functions |
|---|---|---|
| feedparser.py | Parses Atom and RSS feeds from URLs using BeautifulSoup. | parse() |
| net.py | Low-level networking: TCP/UDP sockets, SSL connections, Unix domain sockets, public IP lookup, hostname validation, and CIDR conversion. | fetch(), fetch_ssl(), fetch_socket(), get_public_ip(), is_valid_hostname() |
| url.py | HTTP client for fetching HTML, JSON, or raw data. Supports GET/POST, Basic/Digest authentication, SSL/TLS options, custom headers, and proxy control. | fetch(), fetch_json(), get_latest_version_from_github(), strip_tags() |
| Module | Description | Key Functions |
|---|---|---|
| powershell.py | Executes PowerShell commands locally (on Windows hosts). | run_ps() |
| smb.py | Native SMB/CIFS file access: list, glob, and open files on remote shares with encryption support. | glob(), open_file() |
| winrm.py | Executes commands and PowerShell scripts on remote Windows hosts via WinRM. Supports Kerberos, NTLM, CredSSP, and JEA (Just Enough Administration). | run_cmd(), run_ps() |
| Module | Description | Key Functions |
|---|---|---|
| grassfish.py | Grassfish digital signage REST API. | fetch_json() |
| huawei.py | Huawei storage system status parsing (controller models, health, LED status). | get_controller_model() |
| icinga.py | Icinga2 REST API client for querying services, setting acknowledgements, and managing downtimes. | get_service(), set_ack(), set_downtime(), remove_downtime() |
| infomaniak.py | Infomaniak Swiss Backup REST API for events and backup products. | get_events(), get_swiss_backup_products() |
| jitsi.py | Jitsi Meet server statistics API. | get_data() |
| keycloak.py | Keycloak identity provider API with OIDC discovery and admin token management. | discover_oidc_endpoints(), obtain_admin_token(), get_data() |
| librenms.py | LibreNMS monitoring API with state conversion. | get_data() |
| nextcloud.py | Nextcloud OCC command execution. | run_occ() |
| nodebb.py | NodeBB forum API. | get_data() |
| qts.py | QNAP QTS NAS API with authentication. | get_auth_sid() |
| redfish.py | Redfish BMC API for chassis, thermal, power, and storage monitoring. | get_chassis(), get_thermal(), get_power() |
| rocket.py | Rocket.Chat API for statistics, room management, and webhooks. | get_token(), get_stats(), send2webhook() |
| uptimerobot.py | UptimeRobot API for monitor and alert management. | get_monitors(), new_monitor(), get_account_details() |
| veeam.py | Veeam Backup & Replication Enterprise Manager API. | get_token() |
| wildfly.py | WildFly/JBoss application server management API (standalone and domain mode). | get_data() |
A typical monitoring plugin using these libraries:
import lib.args
import lib.base
import lib.url
from lib.globals import (STATE_CRIT, STATE_OK, STATE_UNKNOWN, STATE_WARN)
def main():
# Parse arguments with custom threshold types
parser = lib.args.ArgumentParser()
parser.add_argument('--url', required=True)
parser.add_argument('--warning', type=lib.args.float_or_none, default=80)
parser.add_argument('--critical', type=lib.args.float_or_none, default=90)
args = parser.parse_args()
# Fetch data (coe = "Continue or Exit")
result = lib.base.coe(lib.url.fetch_json(args.url))
# Evaluate thresholds
state = lib.base.get_state(result['usage'], args.warning, args.critical)
perfdata = lib.base.get_perfdata('usage', result['usage'], '%', args.warning, args.critical, 0, 100)
# Output and exit
lib.base.oao('Usage is {}%'.format(result['usage']), state, perfdata)
if __name__ == '__main__':
main()Count the function calls to any "lib" library in your project and sort by frequency:
grep -rhoP '\Wlib\.[a-zA-Z0-9_\.]+' * | sed 's/^[^a-zA-Z0-9]*//' | sort | uniq -c | sort -nr