Lib
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.
Install / Use
/learn @Linuxfabrik/LibREADME
Linuxfabrik Python Libraries
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.
Installation
Add linuxfabrik-lib as a dependency to your project, or install it manually:
pip install --user linuxfabrik-lib
Documentation
Full API documentation is available at linuxfabrik.github.io/lib. It is automatically built and deployed on every push to main.
Design Principles
These libraries are built with a clear set of priorities:
- Procedural by design. The libraries deliberately use a procedural/functional style rather than object-oriented programming. Pure functions with explicit inputs and outputs are easier to read, test, and reason about. This is especially true for the most prominent use case -- monitoring plugins -- which are short-lived, linear processes with no complex state to manage over time, where unnecessary abstraction layers would add overhead without tangible benefit.
- 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.
Library Index
Core Utilities
| 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() |
Data Access & Caching
| 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() |
System & OS
| 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() |
Networking & HTTP
| 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() |
Windows Integration
| 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() |
API Integrations
| 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(
